我用的是pgAdmin 4.16。
该数据库包含一个名为flights的表。在这个表中,每一行代表一个航班。当航班延误时,延误代码被用来描述延误的原因。每个延迟码都有一个时间延迟,用于描述延迟有多长。一个延迟最多可以包含3个延迟码及其相对延迟时间。我只能按1组列(延迟代码和延迟时间)对延迟代码进行分组,但不能对所有3列进行分组。下面是脚本:
SELECT delay_code_1, COUNT(delay_code_1), AVG(delay_time_1), SUM(delay_time_1)
FROM flights
GROUP BY delay_code_1
ORDER BY SUM(delay_time_1) DESC这是航班表:

以下是所需的结果:

我由衷的感谢
发布于 2020-08-12 03:11:16
出现此问题的原因是表的格式不正常-应将重复组分解到另一个表中。如果这是您的模式,您可以重新签名。
但是,假设您不能更改模式,一种解决方案是在表中联合三次传递,例如
SELECT delay_code, SUM(delay_time) as Total_Time
FROM
(
SELECT delay_code_1 as delay_code, delay_time_1 as delay_time
FROM flight
WHERE delay_code_1 is not null
UNION ALL
SELECT delay_code_2 as delay_code, delay_time_2 as delay_time
FROM flight
WHERE delay_code_2 is not null
UNION ALL
SELECT delay_code_3 as delay_code, delay_time_3 as delay_time
FROM flight
WHERE delay_code_3 is not null
)
GROUP BY delay_codeHTH
编辑-正如@a_horse_with_no_name所提到的,在这里应该使用UNION ALL。普通UNION消除了结果的重复,因此如果存在相同代码和时间的多个延迟,则Total_Time将是错误的。
https://stackoverflow.com/questions/63364742
复制相似问题