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


相关推荐

  • 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    使用MySQL Workbench建立数据库,建立新的表,向表中添加数据初学数据库,记录一下所学的知识。我用的MySQL数据库,使用MySQLWorkbench管理。下面简单介绍一下如何使用MySQLWorkbench建立数据库,建立新的表,为表添加数据。  点击上图中的“加号”图标,新建一个连接,    如上图,先输入数据库的账号密码,帐号默认为root,填好密码后点击“OK”,连接就建立好了,建立完成后,会出现一个长方

    2022年9月24日
    3
  • 从零开始学习UCOSII操作系统1–UCOSII的基础知识

    从零开始学习UCOSII操作系统1–UCOSII的基础知识从零开始学习UCOSII操作系统1–UCOSII的基础知识前言:首先比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料是多很多的。更重要的原因是自己本身还没有能力深入的研究Linux操作系统。本次学习UCOSII主要是学习内核的设计原理。此次专栏涉及到的API的使用是非常小的,仅仅作为本人学习的记录。后期也会对比UCOSIII说出实…

    2022年5月4日
    212
  • 二叉树进行中序遍历的结果_层次遍历和中序遍历构建二叉树

    二叉树进行中序遍历的结果_层次遍历和中序遍历构建二叉树目录1.二叉树1.中序遍历1.二叉树1.中序遍历不论是二叉树、二叉排序树(搜索树),遍历是基础。至于什么是中序遍历,中规中矩的理论,可以参考这篇文章,二叉树中序遍历(递归+非递归)Java.,其中详细介绍了中序遍历实现的方法和结果,包括递归和非递归两种方式。…

    2022年9月14日
    3
  • 深入剖析MSAA_MSA分析报告

    深入剖析MSAA_MSA分析报告本文打算对MSAA(Multisampleantialiasing)做一个深入的讲解,包括基本的原理、以及不同平台上的实现对比(主要是PC与Mobile)。为了对MSAA有个更好的理解,所以写下了

    2022年8月3日
    5
  • 测试从零开始-No.6-测试用例设计方法(等价类+边界值)「建议收藏」

    测试从零开始-No.6-测试用例设计方法(等价类+边界值)「建议收藏」问题:有时候用selenium操作浏览器,打开多个页面后,在不用的时候,需要关掉,切换页面需要切换句柄,关掉页面后,也需要重新切换句柄,否则页面接着操作元素会出问题解决方法:

    2022年8月31日
    6
  • Window Hook 技术详解

    Window Hook 技术详解Hook简介微软的MSDN中,对Hook的解释为:Ahookisapointinthesystemmessage-handlingmechanismwhereanapplicationcaninstallasubroutinetomonitorthemessagetrafficinthesystemandprocesscertain

    2022年5月25日
    61

发表回复

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

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