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

标签 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    |
+-------+------+

顺便说一句,如果我为这个新的 SQL 语句添加 group by,我怎么知道是否首先执行了 (1) group by,然后在 group-by 结果上左连接,或者 (2) 左连接,然后 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

最佳答案

在没有GROUP BY 的情况下使用聚合函数(例如COUNT())将导致implicit GROUP BY将所有行分组为一行。

If you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows.

关于mysql - 为什么这个左连接只返回一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451858/

相关文章:

java - 使用 Java 读取/写入访问表

mysql - PyMySQL 可以用作 Python 的 MySQL/Connector 的直接替代品吗?

php - 创建链接服务器到Mysql Cpanel

sql - 如何使用动态数据库切换为单个grails Web应用程序创建多个URL

mysql - 帮助我理解这段 MySQL 代码

c# - 在 Linq 查询中动态选择属性

MySQL - 使用连接获取两个表上两组数据之间的差异?

PHP textarea 将额外的新行保存到 MySQL DB

sql - 如何在存储过程中获取sql错误

javascript - 如何更改 JavaScript 代码?