我需要能够根据另一列访问多个最小值。
例如,一场比赛有多个圈,我想知道哪个抽头最快完成,但是表Lap包含了多个比赛的数据。
SELECT MIN(lapTime), lapRaceName, lapRaceDate
FROM Lap JOIN (
SELECT DISTINCT raceRaceName
FROM Race ) races
ON Lap.lapRaceName = races.raceRaceName
这段代码我只能找到所有比赛中最快的单圈时间,而不是单个比赛的单圈时间。
谢谢!
答案 0 :(得分:1)
查询缺少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似乎只是确保Racename中也存在racename。
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