MySQL Поиск минимальных значений для нескольких строк - PullRequest
0 голосов
/ 05 декабря 2018

Мне нужно иметь доступ к нескольким минимальным значениям в зависимости от другого столбца.

Например, у гонки есть несколько кругов, и я хочу знать, какой ответ был выполнен быстрее, но в таблице Lap есть данные для нескольких гонок.

SELECT MIN(lapTime), lapRaceName, lapRaceDate
FROM Lap JOIN (
    SELECT DISTINCT raceRaceName
    FROM Race ) races
    ON Lap.lapRaceName = races.raceRaceName

Этот код у меня есть тольконаходит самое короткое время круга для всех гонок вместе, а не время круга для отдельных гонок.

Спасибо!

1 Ответ

0 голосов
/ 05 декабря 2018

В запросе отсутствует GROUP BY

SELECT MIN(Lap.lapTime), Lap.lapRaceName, Lap.lapRaceDate
FROM Lap 
JOIN (
    SELECT DISTINCT raceRaceName
    FROM Race 
) races
ON races.raceRaceName = Lap.lapRaceName
GROUP BY Lap.lapRaceName, Lap.lapRaceDate

Но, может быть, это можно упростить?
Поскольку, похоже, он не получает никаких дополнительных данных из подзапроса.ВНУТРЕННЕЕ СОЕДИНЕНИЕ в подзапросе, кажется, только гарантирует, что racename также существует в таблице Race.

SELECT MIN(lapTime) AS MinLapTime, lapRaceName, lapRaceDate
FROM Lap
GROUP BY lapRaceName, lapRaceDate
ORDER BY lapRaceName, lapRaceDate

Другое дело, что имя гонки также сохраняется в таблице Lap.
В соответствии с обычной практикой нормализации было бы лучше, если бы у таблицы Lap был внешний ключ к первичному ключу таблицы Race.
Тогда имя гонки сохраняется только в одной таблице.

Тогда это может быть запрос, подобный следующему примеру:

SELECT MIN(Lap.lapTime), Race.raceRaceName, Lap.lapRaceDate
FROM Lap 
JOIN Race
  ON Race.raceID = Lap.lapRaceId
GROUP BY Race.raceID, Race.raceRaceName, Lap.lapRaceDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...