MySQL查找多行的最小值

时间:2018-12-04 23:40:16

标签: mysql sql

我需要能够根据另一列访问多个最小值。

例如,一场比赛有多个圈,我想知道哪个抽头最快完成,但是表Lap包含了多个比赛的数据。

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

这段代码我只能找到所有比赛中最快的单圈时间,而不是单个比赛的单圈时间。

谢谢!

1 个答案:

答案 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