【发布时间】:2018-12-09 01:11:45
【问题描述】:
我正在尝试计算任何汽车在单场比赛中发生的最高撞车次数,因此一辆汽车可能在一场比赛中发生多次撞车事故(形象地)。我有一个包含以下列的崩溃表:
c_raceName、c_raceDate、c_raceId 和其他不相关的。
首先,为了唯一标识一个种族,它以raceName 和raceDate 对出现。要唯一识别崩溃,您必须将此对与 raceId 一起使用。
所以所有这些列实际上都属于另一个表,即我们的Entry 表。此表包含参加比赛的汽车的信息。此表包含以下列:
e_raceId、e_raceDate、e_raceName、e_raceEntryCarId、e_raceEntryDriverId。
我已经意识到并不是每场比赛都会进入Crash 表,所以我相信我要么必须参考Crash 表中的Entry 表,要么反过来。
此外,如果还没有包含比赛条目的数据,并且 raceName 和 raceDate 对数据仅存在于包含 r_raceName 和 r_raceDate 基本信息的 Race 表中,该怎么办? .
所以我相信我可能需要做的是SELECT 从Crash 表,JOIN 到Entry 表,再到Race 表才能真正获得所有raceName和raceDate 对。虽然我不知道如何编写一个条件来说明如果这些对不存在于Crash 表中,那么在我的输出中我希望它们被赋予 0 的值,或者让它们出现在我的实际上完全输出。
所以我已经走到了这一步:
SELECT DISTINCT l.c_raceName AS raceName,
l.c_raceDate AS raceDate,
COUNT( l.c_raceId) AS mostCrashes
FROM Crashes l
GROUP BY l.c_raceId
;
产生以下输出:
raceName | raceDate | mostCrashes
---------------------------------
Race 1 |2018/01/21| 1
Race 1 |2018/01/21| 3
... | ... | ...
所以我已经能够将它们分成 3 和 1,如上所示,尽管我只希望显示最多的崩溃,所以 3 行。此外,我希望所有没有崩溃的比赛都显示为 0,而不是根本不显示。所以我正在寻找的输出是:
raceName | raceDate | mostCrashes
---------------------------------
Race 1 |2018/01/21| 3
Race 2 |2018/01/21| 5
Race 1 |2018/09/11| 0
Race 1 |2016/03/14| 0
等等
【问题讨论】: