Hive实现分组排序、分组求取topN或者分页的实现方法 您所在的位置:网站首页 sql每组取5条 Hive实现分组排序、分组求取topN或者分页的实现方法

Hive实现分组排序、分组求取topN或者分页的实现方法

2024-06-03 12:32| 来源: 网络整理| 查看: 265

使用到的语法:ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的每条xlh记录返回一个序号。 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)实例.

语法:row_number() over (partition by 字段a order by 计算项b desc ) rank 

--这里rank是别名

partition by:类似hive的建表,分区的意思;

order by :排序,默认是升序,加desc降序;

这里按字段a分区,对计算项b进行降序排序

实例一、 要取top10品牌,各品牌的top10渠道,各品牌的top10渠道中各渠道的top10档期 

1、取top10品牌

select 品牌,sum(income) as num  from table_name group by 品牌 order by num desc limit 10;

 2、 取top10品牌下各品牌的top10渠道        

select 

          a.*

from

          (

                  select 品牌,渠道,sum(income) as num, row_number() over (partition by 品牌 order by num desc ) rank  

                   from table_name

                   where 品牌限制条件

                   group by 品牌,渠道

          )a

where 

          a.rank desc employee; empid                   int deptid                  int salary                  decimal(10,2) Time taken: 0.042 seconds, Fetched: 3 row(s)

(1)需求:根据部门分组,显示每个部门的工资等级 实现的HSQL脚本: hive> SELECT *, row_number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee; OK 1    10    5500.00    1 2    10    4500.00    2 4    20    4800.00    1 3    20    1900.00    2 7    40    44500.00    1 6    40    14500.00    2 5    40    6500.00    3 9    50    7500.00    1 8    50    6500.00    2 Time taken: 25.019 seconds, Fetched: 9 row(s) (2)根据部门分组,求出每个部门的工资等级排名top 2的数据 SELECT     * FROM     (         SELECT             *, row_number() OVER(PARTITION BY deptid                 ORDER BY salary DESC             ) rank         FROM             employee     ) a WHERE     a.rank = 1 AND rnum


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有