Hive常用几个排序函数

hive中查询一组中的前几名,就用到dense_rank(),rank(),row_number()这几个函数,他们的区别在于
 

1️⃣rank()就是排序 相同的排序是一样的,但是下一个小的会跳着排序,比如 
等级 排序
23 1
23 1
22 3

2️⃣dense_rank()相同的排序相同,下一个小的会紧挨着排序,比如
等级 排序
23 1
23 1
22 2 
这样总个数是相对减少的,适合求某些指标前几个等级的个数。

3️⃣row_number()就很简单,顺序排序。比如
等级 排序
23 1
23 2
22 3 
这种排序 总个数是不变的,适合求某些值的前几名。

4️⃣配合over(partition by id,name order by age desc)窗口函数使用很灵活

over不同于group by的分组,可以取出该行的所有字段,而不止分组字段,因此更加方便灵活

5️⃣

 select *, case when ds=max(ds) over(partition by ds ) then 1 else 0 end as flag_ds from mall_data.dtw_mall_tdm_customer_mall_worth_for_everyweek_d limit 100;

你可能感兴趣的:(记录)