Welcome to aparke’s blog!
分组 TopN 问题
实现每个班级成绩前两名的学生信息
在mysql的最新版本mysql8已经支持了排名函数RANK,DENSE_RANK和ROW_NUMBER。但是在就得版本中还不支持这些函数,只能自己实现。实现方法主要用到了条件判断语句(CASE WHEN或IF)和添加临时变量。
区别RANK,DENSE_RANK和ROW_NUMBER
RANK并列跳跃排名,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,跳跃到总共的排名。
DENSE_RANK并列连续排序,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,依然按照连续数字排名。
ROW_NUMBER连续排名,即使相同的值,依旧按照连续数字进行排名。
建表语句
CREATE TABLE score_info ( |
插入数据
insert into score_info values('1',"张三"," 高三1班 "," 90") ; |
实现
-- 实现方式_1 |