开发者导航网站:https://codernav.com
row_number() over(partition by)
语法格式:
row_number() over(partition by 分组列 order by 排序列 desc)
功能:
分组后排序,在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。
-- 单纯排序,无分组
select id,name,class,score,row_number() over(order by score desc) ranking from student_scores t
-- 先分组,再排序
select id,name,class,score,row_number() over(partition by class order by score desc) ranking from student_scores t
-- 先分组,再排序,取第一名
select * from (select id,name,class,score,row_number() over(partition by class order by score desc) ranking from student_scores t) where ranking < 2
rank() over (partition by)
作用:分组排序
准备数据:
-- 创建表
CREATE TABLE student_scores ( id INT PRIMARY KEY, name VARCHAR ( 50 ), class VARCHAR ( 10 ), score INT );
-- 插入测试数据
INSERT INTO student_scores (id, name, class, score) VALUES (1, 'Alice', 'A', 85);
INSERT INTO student_scores (id, name, class, score) VALUES (2, 'Bob', 'A', 90);
INSERT INTO student_scores (id, name, class, score) VALUES (3, 'Charlie', 'B', 95);
INSERT INTO student_scores (id, name, class, score) VALUES (4, 'David', 'B', 80);
INSERT INTO student_scores (id, name, class, score) VALUES (5, 'Emma', 'A', 75);
INSERT INTO student_scores (id, name, class, score) VALUES (6, 'Frank', 'B', 85);
要求:
计算每个班级中学生的成绩排名
SELECT
id,
name,
class,
score,
RANK ( ) OVER ( PARTITION BY class ORDER BY score DESC ) AS ranking
FROM
student_scores;
执行结果:
说明:
在这个查询中,我们使用了partition by class来将数据按照班级进行分区,然后按照成绩降序排列。最后,我们将计算得到的排名作为ranking列返回。
更多精彩内容:https://codernav.com