HIVE-row_number() OVER(PARTITION BY)函数-先分组,取每个分组的前几个

本文详细介绍了OVER(PARTITION BY)函数在SQL查询中的使用,通过实例展示了如何按照特定字段进行分区并排序,以及如何利用row_number()函数为每个分区内的记录添加序列号。通过创建和查询产品销售数据表,解释了如何筛选每个日期内销量最高的前三名商品。
摘要由CSDN通过智能技术生成

OVER(PARTITION BY order by)函数更详细的使用,可查看博文
https://blog.csdn.net/qq_41712271/article/details/109224538

select row_number() over (partition by month order by ref_host_cnts desc)

partition:按照month分成区块

order by :排序是在partition分成的区块中分别进行。

row_number():对各个分区分别添加编号,类似于rownum的递增序列


准备表和测试数据

create external table product_1
(day_id string,
 mac_id int,
 mac_color string,
 day_num int)
 ROW FORMAT DELIMITED 
 FIELDS TERMINATED BY '\t' 
 LINES TERMINATED BY '\n' 
 STORED AS TEXTFILE

load data local inpath '/tmp/data1.txt' overwrite into table product_1
20171011	1292	金色	1
20171011	1292	金色	14
20171011	1292	金色	2
20171011	1292	金色	11
20171011	1292	黑色	2
20171011	1292	粉金	58
20171011	1292	金色	1
20171011	2013	金色	10
20171011	2013	金色	9
20171011	2013	金色	2
20171011	2013	金色	1
20171012	1292	金色	5
20171012	1292	金色	7
20171012	1292	金色	5
20171012	1292	粉金	1
20171012	2013	粉金	1
20171012	2013	金色	6
20171013	1292	黑色	1
20171013	2013	粉金	2
20171011	12460	茶花金	1

sql查询示例如下,以day_id分组,按day_num排序,最前3个

select * from (
select day_id,mac_id,mac_color,day_num,
row_number() over (partition by day_id order by day_num desc) as od 
from product_1
) t where od<=3

返回的结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值