ROW_NUMBER函数的⽤法
row_number() over()分组排序功能:
在使⽤ row_number() over()函数时候,over()⾥头的分组以及排序的执⾏晚于 where 、group by、 order by 的执⾏。
语法格式:row_number() over(partition by 分组列 order by 排序列 desc)
默认是⽣序,降序需要指定desc
建⽴数据
⾸先我们先创建⼀组数据
CREATE TABLE IF NOT EXISTS test_row_number(
id BIGINT
,province STRING
,city STRING
,gdp INT
)
COMMENT"test_row_number";
插⼊数据
insert into test_row_number
values(1,'浙江省','杭州市',10),
(2,'浙江省','绍兴市',8),
(3,'⼭东省','青岛市',20),
(4,'⼭东省','济南市',18),
(5,'江苏省','南京市',5),
(6,'江苏省','苏州市',4);
函数的使⽤
不分区
SELECT city,gdp ,ROW_NUMBER()over(order BY gdp desc)rank
FROM test_row_number
简单按照城市分组,根据GDP进⾏降序排列
city gdp rank
青岛市201
济南市182
杭州市103
绍兴市84
南京市55
苏州市46
按照省份分区
SELECT province,city,gdp ,ROW_NUMBER()over(PARTITION BY province order BY gdp desc)rank
FROM test_row_number
province city gdp rank
⼭东省青岛市201
⼭东省济南市182
province city gdp rank
江苏省南京市51
exists的用法江苏省苏州市42
浙江省杭州市101
浙江省绍兴市82按照省份分区,加筛选条件1
select*from(
SELECT province,city,gdp ,ROW_NUMBER()over(PARTITION BY province order BY gdp desc)rank
FROM test_row_number)
where rank =1
选择各省排名第⼀的城市
province city gdp rank
⼭东省青岛市201
江苏省南京市51
浙江省杭州市101按照省份分区,加筛选条件2
select*from(
SELECT province,city,gdp ,ROW_NUMBER()over(PARTITION BY province order BY gdp desc)rank
FROM test_row_number
where province in('⼭东省'))
where rank =1
province city gdp rank
⼭东省青岛市201
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论