MySQL按功能分组显示数据不足

时间:2018-12-03 20:21:23

标签: mysql sql group-by inner-join

我要寻找的是特定比赛最快的单圈时间,这将通过使用比赛名称和比赛日期来确定。

SELECT lapName AS Name, lapDate AS Date, T
FROM Lap 
    INNER JOIN Race ON Lap.lapName = Race.Name
        AND Lap.lapDate = Race.Date
GROUP BY Date;

它目前仅显示3个不同的比赛名称,带有4个不同的日期,这意味着我总共有4个组合,而实际上有9个唯一的比赛名称,比赛日期组合。

唯一的比赛数据存储在“比赛”表中。间隔时间存储在LapInfo表中。

我也收到有关我的团体声明的警告,说该声明虽然仍在运行,但仍然模棱两可。

2 个答案:

答案 0 :(得分:2)

您似乎不需要join

SELECT l.lapRaceName, l.lapRaceDate, 
       MIN(l.lapTime)
FROM LapInfo l
GROUP BY l.lapRaceName, l.lapRaceDate;

如果您不需要JOIN,则在查询中放入一个是多余的。

答案 1 :(得分:1)

首先,您的查询实际上是无效的SQL。您需要使用MIN函数来获得最快的lapTime。另外,您必须GROUP BY lapRaceName, raceDate而不是lapRaceName。不幸的是,在这种情况下,mysql不够宽松,可以执行它而不会出错。

此外,您将LapInfoRace进行联接,并从LapInfo返回j联接的列,这些列是您在Race中可以找到的别名。从SQL的角度来看,这是可以的,但是这也非常复杂:直接返回Race表中的列,因为它们具有您要查找的名称。

最后,最好指出每列属于哪个表。在这里,列lapTime属于表LapInfo,因此我们将其明确。

查询:

SELECT 
    Race.raceName,
    Race.raceDate, 
    MIN(LapInfo.lapTime)
FROM 
    Race 
    INNER JOIN LapInfo
        ON  LapInfo.lapRaceName = Race.raceName
        AND LapInfo.lapRaceDate = Race.raceDate
GROUP BY 
    Race.raceName,
    Race.raceDate
;