Menu
CoddyTech

RANK 和 DENSE_RANK 函数

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 65 课,共 72 课。

ROW_NUMBER() 是一种排名函数,还有另外两种:RANK() 和 DENSE_RANK()。

RANK() 函数为行编号,类似于 ROW_NUMBER(),但相同的行会获得相同的编号,并且会跳过编号。DENSE_RANK() 与 RANK() 类似,但不会跳过编号。

例如:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

这将返回:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

说明:

  • ROW_NUMBER():始终唯一:1、2、3、4、5、6
  • RANK():
    • 等级 5(2 行):两行的排名都是 1
    • 等级 6(2 行):两行的排名都是 3(跳过 2)
    • 等级 7(2 行):两行的排名都是 5(跳过 4)
  • DENSE_RANK():
    • 等级 5(2 行):两行的排名都是 1
    • 等级 6(2 行):两行的排名都是 2(不跳过)
    • 等级 7(2 行):两行的排名都是 3(不跳过)
challenge icon

挑战

简单

可用的表和列:

  • medals:region,medal_color,medal_count

编写一个查询,显示地区、奖牌总数(不考虑颜色,统计所有奖牌的总和)和两种排名:

  1. 按奖牌总数进行排名的 regular_rank(排名之间有间隔)
  2. 按奖牌总数进行排名的 dense_rank(排名之间没有间隔)

按以下顺序排列结果:

order by total_medals desc, region asc

亲手试试

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器