为什么这个左连接只返回一条记录?

时间:2015-09-08 07:36:14

标签: mysql sql

这是一个示例输入,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

1 个答案:

答案 0 :(得分:3)

使用不带COUNT()的汇总功能(例如GROUP BY)会导致implicit GROUP BY将所有行分组到一行。

  

如果在不包含GROUP BY子句的语句中使用组函数,则它等同于对所有行进行分组。