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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python海龟绘图画树_python,递归函数画树,海龟作图,turtle

    python海龟绘图画树_python,递归函数画树,海龟作图,turtle原博文2020-04-0710:18−importturtleimporttimedeftree(t,trunk_length,pensize):iftrunk_length>5:t.pensize(pensize)t.forward(trunk_lengt…相关推荐2019-12-2409:01−用turtle函数画空心圆turtle.cir…

    2022年6月28日
    24
  • 用 Java3D 写游戏

    用 Java3D 写游戏2009-03-2413:26:51|  分类: Java3D先介绍下相关的技术吧Java3D 作为SUN公司较早推出的一项3D技术,是一种高度封装的API,构建在OpenGL和Direct3D之上,可以说是最有名的Java的3D技术。由于种种原因(A

    2022年5月25日
    28
  • 面试题—5种单例模式写法以及单线程和多线程下的区别

    面试题—5种单例模式写法以及单线程和多线程下的区别闲来无事看之前的博客,发现单例模式只会写2中。所以再重新开一篇博客,将目前自己所能理解的几种单例模式全部总结下。______________________________________________________________________________________________________________________1、懒汉式(最基本的) 单线程版写单例模式(饿汉式)的步骤: 1):必须在该类中,自己先创建出一个对象。 2):私有化自身的…

    2022年6月13日
    26
  • guzzlehttp

    guzzlehttpguzzlehttp

    2022年4月24日
    115
  • 视频直播之基础原理

    视频直播之基础原理SDK(SoftwareDevelopmentKit):软件开发工具包涉及的技术:采集处理编码封包推流播放RTMP(RealTimeMessagingProtocol,实时消息传送协议),是AdobeSystems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。优点:主流CDN支持,市面上绝大多数的直播产品采用;协议简单易实现缺点:基于…

    2022年7月23日
    12
  • Java邮箱正则表达式验证_java正则表达式以什么开头

    Java邮箱正则表达式验证_java正则表达式以什么开头packagecom.Janson.test;/***@authorJanson*/importjava.util.regex.*;publicclasstest{publicstaticbooleancheckEmaile(Stringemaile){/***正则表达式实用规则…

    2022年9月24日
    0

发表回复

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

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