我需要能够根据另一列访问多个最小值。
例如,一场比赛有多圈,我想知道哪一圈完成得最快,但圈表中有多场比赛的数据。
SELECT MIN(lapTime), lapRaceName, lapRaceDate
FROM Lap JOIN (
SELECT DISTINCT raceRaceName
FROM Race ) races
ON Lap.lapRaceName = races.raceRaceName
这个代码我只找到所有比赛的最快圈速,而不是单个比赛的圈速。
谢谢!
查询缺少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
但也许这个可以简化
因为它似乎没有从子查询中获得任何额外的数据。子查询上的INNER JOIN似乎只是为了确保Race表中也存在racename。
SELECT MIN(lapTime) AS MinLapTime, lapRaceName, lapRaceDate
FROM Lap
GROUP BY lapRaceName, lapRaceDate
ORDER BY lapRaceName, lapRaceDate
另一件事是,比赛名称也保留在圈表中
根据标准化的常见做法,如果圈表有一个外键作为比赛表的主键,那会更好
然后种族名称只保存在一张表中。
然后它可能是一个类似以下示例的查询:
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