欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLSERVER中RANK OVER(PARTITION BY)的用法

程序员文章站 2022-06-15 23:11:02
查询出每个班级成绩是第一名的同学SELECT * FROM (SELECT s.name,s.class,RANK() OVER(PARTITION BY s.class ORDER BY s.score DESC)S FROM students s)AS S WHERE S=1其中RANK()和DENSE_RANK()的区别就是并列第一名的时候,接下来这个同学是第二名还是第三名的区别SELECT s.name,s.class,DENSE_RANK() OVER(PARTITION ....

查询出每个班级成绩是第一名的同学

SQLSERVER中RANK OVER(PARTITION BY)的用法

SELECT * FROM 
(SELECT s.name,s.class,RANK() OVER(PARTITION BY s.class ORDER BY s.score DESC)S FROM students s)AS S 
WHERE S=1

其中 RANK()和DENSE_RANK()的区别就是并列第一名的时候,接下来这个同学是第二名还是第三名的区别

SELECT s.name,s.class,DENSE_RANK() OVER(PARTITION BY s.class ORDER BY s.score DESC) S  FROM students s

 那么和GROUP BY有什么区别呢?
SQLSERVER中RANK OVER(PARTITION BY)的用法

SELECT s.class,COUNT(1) FROM students s GROUP BY s.class
GROUP BY 一般只是分组,和聚合函数一起使用,而OVER(PARTITION BY)还有一些高级功能

如果把RANK()换成是ROW_NUMBER()会是什么个情况呢?

SELECT s.class,s.score,s.name,row_number() over(partition by s.class order by s.score desc) 
FROM students s

 将不会出现并列第一的排名,这个需要注意!

SQLSERVER中RANK OVER(PARTITION BY)的用法

本文地址:https://blog.csdn.net/weixin_41896770/article/details/107625845

相关标签: SQLSERVER