Показать лучшие N баллов в MySQL 8 без дубликатов по категориям - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующая таблица в 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?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

поскольку предложение order by выполняется после предложения select, попробуйте указать псевдонимы для min (оценка).

SELECT person, MIN(score) as min_score FROM golf_scores GROUP BY person ORDER BY min_score LIMIT 3;

0 голосов
/ 15 февраля 2019

Вы можете попробовать использовать row_number()

    select * from
    (
         SELECT person, score,row_number() over(partition by person order by score) as rn
         FROM golf_scores 
    )A where rn=1
    ORDER BY score LIMIT 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...