MySQL查找多行的最小值



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

例如,一场比赛有多圈,我想知道哪一圈完成得最快,但圈表中有多场比赛的数据。

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

最新更新