博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
阅读量:6367 次
发布时间:2019-06-23

本文共 1604 字,大约阅读时间需要 5 分钟。

row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

--表示依据COL1分组,在分组内部依据 COL2排序。而此函数返回的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

create table student (id int ,classes int ,score int);insert into student values(1,1,89);insert into student values(2,1,90);insert into student values(3,1,76);insert into student values(4,2,69);insert into student values(5,2,79);insert into student values(6,2,95);insert into student values(7,3,80);insert into student values(8,3,85);insert into student values(9,3,79);commit;

 

select t.* from student t;

--数据显示为

id       classes      score
-------------------------------------------------------------
1           1          89
2           1          90
3           1          76
4           2          69
5           2          79
6           2          95
7           3          80
8           3          85
9           3          79

--需求:依据班级分组,显示每一个班的英语成绩排名

--预期结果:

id       classes      score                              rank

----------- ----------- ---------------------------------------
3           1          76                                 1
1           1          89                                 2
2           1          90                                 3
4           2          69                                 1
5           2          79                                 2
6           2          95                                 3
9           3          79                                 1
7           3          80                                 2
8           3          85                                 3

--SQL脚本:

SELECT *, Row_Number() OVER (partition by classes ORDER BY score desc) rank FROM student;

--查询t_test表中,callid字段没有反复过的数据,效率高过group by having count

select t.*, t.rowid  from t_test t where t.rowid not in (select rid                         from (select t2.rowid rid,                                      row_number() over(partition by t2.callid order by t2.rowid desc) m                                 from t_test t2)                        where m <> 1)   and t.rowid not in (select rid                         from (select t2.rowid rid,                                      row_number() over(partition by t2.callid order by t2.rowid asc) m                                 from t_test t2)                        where m <> 1);

 

转载地址:http://ekrma.baihongyu.com/

你可能感兴趣的文章
shields小徽章是如何生成的?以及搭建自己的shield服务器
查看>>
猫头鹰的深夜翻译:spring事务管理
查看>>
记一次使用Spring REST Docs + travis + github自动生成API接口文档的操作步骤(下)...
查看>>
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>
Laravel优秀扩展包整理
查看>>
日志分析之识别真假蜘蛛与处理办法
查看>>
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
卢森堡大学发布RepuCoin系统,可破解区块链51%攻击
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
细说Unicode(一) Unicode初认识
查看>>
Node.js有了新的管理者
查看>>
Java 20年:历史与未来
查看>>
彻底理解Javascript中的原型链与继承
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
gRPC-Web发布,REST又要被干掉了?
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>