row_num()语法:
row_number() over(partition by location order by pm2_5 desc) as num
根据col1分组,然后根据col2进行排序,排序的序号为index
实例
使用数据为三城市近三天pm2.5数值表:
现在想要求每个城市这三天pm2.5数值最高的那一天,逻辑为首先对location进行分组,然后对每一组的PM2.5数值进行降序排序,然后取每一组的第一条数据,即为近三天最高的数据。
我们来分步看实际结果
1、首先加入row_number()
sql语句为:
select a.*,
row_number() over(partition by location order by pm2_5 desc) as num
from test_having_pm25 a
结果:
发现加入row_number()函数后,实际是在原先的表最后加入了一列序号num
2、接下来加入条件筛选,选择num=1的数据,即为所求的数据
sql语句为:
select *
from (select day,
pm2_5,
location,
row_number() over(partition by location order by pm2_5 desc) as num
from test_having_pm25) a
where a.num = 1
结果为:
总结
row_number()实际功能为对分组后的数据进行排序,从而取特定序号的数据。