我需要以下代码的帮助:
SELECT ID, (CASE WHEN SUM(ArrivalsDelay) > SUM(DeparturesDelay) THEN ArrivalsDelay WHEN SUM(ArrivalsDelay) < SUM(DeparturesDelay) THEN DeparturesDelay END) AS ShippingDelay
FROM Shipments
GROUP BY ID, ArrivalsDelay, DeparturesDelay
ORDER BY ShippingDelay DESC
LIMIT 10;
代码问题:
结果表在延迟字段中仅包含 NULL。我不确定为什么会发生这种情况,因为从 GROUP BY 中删除 ArrivalsDelay 和 DeparturesDelay 会导致 SELECT 失败,因为我没有将 ArrivalsDelay 包含在不合法的 GROUP BY 中。我也不完全确定我尝试完成的程序的实施是否正确。
不良行为示例:
记录:
1, 50, 50
2, 50, 50
1, 20, 20
1, 30, 50
2, 20, 70
印刷:
1, null
2, null
期望的行为:
获取 10 个发货延迟次数最多的唯一发货 ID,以及它们的发货延迟次数(按发货延迟的降序排列)。
我遇到的问题:
配置运输延迟变量。澄清一下,如最初描述中所述,“运输延迟”不是一个明确的列。相反,可用的是 Departure Delays 和 Arrival Delays 列(单独的列)。对于任何给定的运输 ID,我想将出发延误的总和与到达延误的总和进行比较,并使用较大的作为运输延误。
更远:
但我不确定什么语法实际上可用于执行 2 列总和之间的比较并选择 1 分配给变量以供进一步使用。
所以我想一些伪代码是:
Delay = SUM(ArrivalDelay) IF SUM(ArrivalDelay) > SUM(DepartureDelay)
OR
Delay = SUM(DepartureDelay) IF SUM(ArrivalDelay) < SUM(DepartureDelay)
谢谢你的帮助。