如何解决SQL查询GROUP BY在多个列上具有相同的值,并返回相对时间值的SUM
我有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
以下是航班表:
这是预期的结果:
由衷的感谢
解决方法
发生此问题的原因是表的格式不正确-重复的组应分解为另一个表。如果这是您的架构,则可以重新分配。
但是,假设您无法更改架构,一种解决方案是在表上合并三遍,例如
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_code
HTH
已编辑-如@a_horse_with_no_name所述,此处应使用UNION ALL。普通UNION对结果进行重复数据删除,因此如果相同代码和时间存在多个延迟,则Total_Time将是错误的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。