文章目录
-
-
- 1. 排名分类
-
- 1.1 区别RANK,DENSE_RANK和ROW_NUMBER
- 1.2 分组排名
- 2. 准备数据
- 3. 不分组排名
-
- 3.1 连续排名
- 3.2 并列跳跃排名
- 3.3 并列连续排名
- 4. 分组排名
-
- 4.1 分组连续排名
- 4.2 分组并列跳跃排名
- 4.3 分组并列连续排名
-
在MYSQL的最新版本MYSQL8已经支持了排名函数,和。但是在就得版本中还不支持这些函数,只能自己实现。实现方法主要用到了条件判断语句(或)和添加临时变量。
1. 排名分类
1.1 区别RANK,DENSE_RANK和ROW_NUMBER
- RANK并列跳跃排名,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,跳跃到总共的排名。
- DENSE_RANK并列连续排序,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,依然按照连续数字排名。
- ROW_NUMBER连续排名,即使相同的值,依旧按照连续数字进行排名。
1.2 分组排名
2. 准备数据
创建一张分数表,里面有字段:分数score,课程号course_id和学生号student_id。
执行如下SQL语句,进行导入数据。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
3. 不分组排名
3.1 连续排名
- 使用实现:
- 1
- 2
- 3
- 使用实现:
- 1
- 2
- 3
3.2 并列跳跃排名
- 使用实现:
- 1
- 2
- 3
- 使用和语句实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 使用和语句实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3.3 并列连续排名
- 使用实现:
- 1
- 2
- 使用和语句实现:
- 1
- 2
- 3
- 4
- 5
- 使用和语句实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
4. 分组排名
4.1 分组连续排名
- 使用实现:
- 1
- 2
- 使用和语句实现:
- 1
- 2
- 3
- 4
- 5
4.2 分组并列跳跃排名
- 使用实现:
- 1
- 2
- 3
- 使用和语句实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
4.3 分组并列连续排名
- 使用实现:
- 1
- 2
- 3
- 使用和语句实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
可以将上述的IF条件提取出来:
- 1
- 2
- 3
- 4
- 5
- 6
- 7