这是一个示例输入,SQL和输出,并想知道为什么只返回一行?我正在使用MySQL / MySQL Workbench。
+----+-------+
| Id | Score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
SELECT
score_primary.score, COUNT(DISTINCT score_higher.score) + 1 AS rank
FROM
TestRank score_primary
LEFT JOIN TestRank score_higher ON score_higher.score > score_primary.score
输出:
+-------+------+
| score | Rank |
+-------+------+
| 3.5 | 4 |
+-------+------+
BTW,如果我添加group by,对于这个新的SQL语句,我怎么知道是否首先执行(1)group by,然后在group-by结果上左连接,或者(2)left join,然后group-在左边加入结果?
SELECT
score_primary.score, COUNT(DISTINCT score_higher.score) + 1 AS rank
FROM
TestRank score_primary
LEFT JOIN TestRank score_higher ON score_higher.score > score_primary.score
GROUP BY score_primary.score
答案 0 :(得分:3)
使用不带COUNT()
的汇总功能(例如GROUP BY
)会导致implicit GROUP BY将所有行分组到一行。
如果在不包含GROUP BY子句的语句中使用组函数,则它等同于对所有行进行分组。