【发布时间】:2019-07-09 04:16:00
【问题描述】:
我在 MySQL 8.0.15 中有下表:
CREATE TABLE golf_scores (person TEXT, score INT);
INSERT INTO golf_scores VALUES ('Angela', 40),('Angela', 45),('Angela', 55),('Peter',45),('Peter',55),('Rachel', 65),('Rachel',75),('Jeff',75);
SELECT * FROM golf_scores;
+--------+-------+
| person | score |
+--------+-------+
| Angela | 40 |
| Angela | 45 |
| Angela | 55 |
| Peter | 45 |
| Peter | 55 |
| Rachel | 65 |
| Rachel | 75 |
| Jeff | 75 |
+--------+-------+
我正在尝试获得以下前 3 名:
SELECT * FROM golf_scores;
+--------+-------+
| person | score |
+--------+-------+
| Angela | 40 |
| Peter | 45 |
| Rachel | 65 |
+--------+-------+
换句话说,我想要最好(最低)的 3 杆高尔夫球杆得分,而不需要人为重复。我不担心关系;我仍然想要三个结果。
我认为这个查询可以做到:
SELECT person, MIN(score) FROM golf_scores GROUP BY person ORDER BY score LIMIT 3;
但我收到以下错误:
ERROR 1055 (42000):ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“records.golf_scores.score”;这与 sql_mode=only_full_group_by 不兼容
将score 添加到GROUP BY 列表中只会返回总分最低的3,而不管person 列中是否存在重复。
如何在 MySQL 中获得所需的输出?
【问题讨论】:
-
避免在 cmets 中回答问题。