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进行降序排列

citygdprank
青岛市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
provincecitygdprank
山东省青岛市201
山东省济南市182
江苏省南京市51
江苏省苏州市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

选择各省排名第一的城市

provincecitygdprank
山东省青岛市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
provincecitygdprank
山东省青岛市201
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy_shenzl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值