问题来源
Group by
和distinct
与count
函数的组合,都可以实现对某一列的重复值消除的作用。
这里以LeetCode
上的一个排名练习为例,来证明一下二者的相似性。
mysql> select * from Scores;
+----+-------+
| Id | Score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
这里设置3种排名规则
规则1:相同分数取相同排名,相同排名后的下一名按名次加1,排名应连续
规则2:相同分数取相同排名,相同排名后的下一名按人数进行排名,排名不连续
规则3:相同分数取不同排名,不分先后
规则1
思路:
- 建立
score
列和对应的rank
列,按score
列降序排列 - 其中
rank
列以子查询的方式表示,选取大于对应分数的列应用count
函数
count(distinct)
解法:
mysql> select s1.Score as score,
-> (select cou