row_number() OVER (PARTITION BY COL1 ORDER BY COL2)「建议收藏」

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

大家好,又见面了,我是全栈君。

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);

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116265.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab中clc和clear作用_clc,clear

    matlab中clc和clear作用_clc,clearcacl()用法解析可以使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。以前我们可以使用box-sizing:border-box;来设置盒子的属性为不加上边距。现在我们又多了一个选择了。但要注意,两者只能使用一个哦,否则就会造成冲突了。calc()可以使用数学运算中的简单加(+)、减(-)、乘(*)和除(/)来解决问题,而且还可以根据单位如px,em,rem和百分比来转化计算,但是要注意,使用运算符号的时候要与两边的值有空格和间隙,否

    2025年7月23日
    4
  • Apk 签名验证

    Apk 签名验证当app进行反编译后修改,再回编译,若出现闪退的情况时,则有可能是由于程序本身已存在签名验证,才会出现闪退,今天分享如何解决因签名验证而出现的闪退现象。v:13140310004q:32519015161阅读签名验证源码1.打开文件2.分析Java层,在调用init这个方法里面,是进行按钮以及其他控件的初始化3.接下来是一个注册函数,判断用户名和密码是否相等,从而弹出不同的提示4.LoginActivity类继承了BaseActivity,先分析BaseActivity这个类5.分析onC

    2022年6月7日
    86
  • SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 – 管道的另一端上无任何进程。

    SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 – 管道的另一端上无任何进程。如果你在使用新创建的 SQLServer 用户名和密码对数据库进行连接的时候出现了下面的问题 阅读本篇博客可以帮助你解决这个问题 已成功与服务器建立连接 但是在登录过程中发生错误 provider SharedMemory error 0 管道的另一端上无任何进程 MicrosoftSQL 错误 233 管道的另一端上无任何进程 出现问题的操作

    2025年10月13日
    4
  • 操作系统维护相关总结「建议收藏」

    操作系统维护相关总结「建议收藏」操作系统维护相关总结声明:引用请注明出处http://blog.csdn.net/lg1259156776/说明:由于前段时间遭受了电脑固态硬盘故障系统崩溃,数据未及时备份无法读取而导致的痛苦,这里

    2022年8月3日
    6
  • sql 时间转字符串_字符串举例

    sql 时间转字符串_字符串举例一、日期时间类型转换为字符串:SelectCONVERT(varchar(100),GETDATE(),0):052020213:47PMSelectCONVERT(varchar(100),GETDATE(),1):05/20/21SelectCONVERT(varchar(100),GETDATE(),2):21.05.20SelectCONVERT(varchar(100),GETDATE(),3):20/05/21SelectCONVERT(var

    2022年10月8日
    6
  • 编码转换工具_PDF在线转换工具

    编码转换工具_PDF在线转换工具核心代码:1voidEncodeBase64(unsignedchar*ce,unsignedchar*co)2{3unsignedchar*p;4unsignedi

    2022年8月6日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号