我试图计算出一场比赛中撞车次数最多的一辆车,所以一辆车在一场比赛中可能会发生多起撞车事故(形象地说)。我有一个包含以下列的崩溃表:
c_raceName
,
c_raceDate
,
c_raceId
以及其他不相关的事情。
首先,为了唯一地识别一个种族
raceName
和
raceDate
一对。要唯一识别崩溃,必须在
raceId
.
所以所有这些列实际上都属于另一个表
Entry
表。此表包含参加比赛的汽车的信息。此表包含以下列:
e_raceId
,
e_raceDate
,
e_raceName
,
e_raceEntryCarId
,
e_raceEntryDriverId
.
我意识到并不是每一场比赛都会参加
Crash
桌子,所以我想我要提到
条目
中的表
撞车
桌子,或者其他地方。
尽管如此,如果还没有包含比赛项目的数据呢?
raceNAMEY
和
赛马场
一对数据只存在于
Race
放置
r_raceName
和
r_raceDate
基本信息。
所以我想我应该做的是
SELECT
从
撞车
表,以及
JOIN
下到
条目
桌子,再往前
种族
真正得到一切的桌子
raceNAMEY
和
赛马场
对。尽管我不知道如何写一个条件,如果这些对不存在于
撞车
表,那么在我的输出中,我希望它们被赋予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
等。