У меня есть следующая таблица в 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;
, но я получаю следующую ошибку:
ОШИБКА 1055(42000): Выражение # 1 предложения ORDER BY отсутствует в предложении GROUP BY и содержит неагрегированный столбец records.golf_scores.score, который функционально не зависит от столбцов в предложении GROUP BY;это несовместимо с sql_mode = only_full_group_by
Добавление score
в список GROUP BY
просто возвращает наименьшую сумму 3 баллов, независимо от дубликатов в столбце person
.
Как получить желаемый вывод в MySQL?