mysql - mySQL - 仅显示最常见的 & 所有其他列组合显示 0
问题描述
我正在尝试计算任何一辆车在一场比赛中发生的最高撞车次数,因此一辆汽车可能在一场比赛中发生多次撞车事故(形象地)。我有一个包含以下列的崩溃表:
c_raceName
, c_raceDate
,c_raceId
和其他不相关的。
首先,为了唯一地识别一个种族,它是一raceName
对的raceDate
。要唯一识别崩溃,您必须将此对与raceId
.
所以所有这些列实际上属于另一个表,即我们的Entry
表。此表包含参加比赛的汽车的信息。此表具有以下列:
e_raceId
, e_raceDate
, e_raceName
, e_raceEntryCarId
, e_raceEntryDriverId
.
我意识到并不是每场比赛都会进入表格,所以我相信我要么必须从表格Crash
中引用表格,要么反过来。Entry
Crash
此外,如果数据还没有包含在比赛条目中,并且raceName
和raceDate
数据对只存在于Race
保存r_raceName
和r_raceDate
基础信息的表上,该怎么办。
所以我相信我可能需要做的是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
等等
解决方案
您的问题有多个部分。如果你想要0
值,那么你需要一个外连接或相关子查询。我想你有一张包含所有比赛的桌子,但桌子select distinct
上的aentries
也可以。
然后,如果您想要每辆车的碰撞次数最多,则需要表中的汽车标识符crashes
。我确定有一个(这很有意义),但是您没有在问题中描述它。我猜是这样的c_raceEntryCarId
。
结果查询如下所示:
select e_racename, e.e_racedate,
(select count(*)
from crashes c
where c.c_racename = e.e_racename and c.e_racedate = e.e_race_date
group by c.c_raceEntryCarId
order by count(*) desc
limit 1
) as most_crashes
from (select e.e_racename, e.e_racedate
from entries e
group by e.e_racename, e.e_racedate
) e;
如果您只想要每场比赛的崩溃次数,子查询会有点不同:
select e_racename, e.e_racedate,
(select count(*)
from crashes c
where c.c_racename = e.e_racename and c.e_racedate = e.e_race_date
) as most_crashes
from (select e.e_racename, e.e_racedate
from entries e
group by e.e_racename, e.e_racedate
) e;
推荐阅读
- c++ - Windows 桌面复制 API AcquireNextFrame 避免 DXGI_ERROR_WAIT_TIMEOUT
- dynamics-crm-2011 - 如何在不破坏 Web UI 的情况下编辑 CRM 工作流 xaml
- c# - 是什么导致在 C# 中反序列化 XML 时出现此错误?
- javascript - 使用 Jquery/JS 检测嵌套 dataTable 单元格中输入字段的变化
- python - 用于自动搜索网站的 Python 脚本?
- angularjs - ionic 4 通过单击按钮填充列表
- extjs - Extjs:覆盖 pivot.plugin.configurator 设置的字段
- java - java函数检查总和是偶数还是奇数,为什么我的代码不起作用?
- jquery - 查找包含项目数组的所有链接
- android - 如何使用 for 循环在 TextView 中显示整数