0

我需要以下代码的帮助:

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)

谢谢你的帮助。

4

1 回答 1

0

根据您刚才的评论...

SELECT
  ID,
  GREATEST(SUM(ArrivalsDelay), SUM(DeparturesDelay))   AS ShippingDelay
FROM
  Shipments 
GROUP BY
  ID
ORDER BY
  ShippingDelay DESC
LIMIT
  10
于 2021-01-16T22:22:46.323 回答