首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询GROUP BY在多个列上具有相同的值,并返回相对时间值的总和

SQL查询GROUP BY在多个列上具有相同的值,并返回相对时间值的总和
EN

Stack Overflow用户
提问于 2020-08-12 03:02:37
回答 1查看 50关注 0票数 0

我用的是pgAdmin 4.16。

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

代码语言:javascript
复制
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

这是航班表:

以下是所需的结果:

我由衷的感谢

EN

回答 1

Stack Overflow用户

发布于 2020-08-12 03:11:16

出现此问题的原因是表的格式不正常-应将重复组分解到另一个表中。如果这是您的模式,您可以重新签名。

但是,假设您不能更改模式,一种解决方案是在表中联合三次传递,例如

代码语言:javascript
复制
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将是错误的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63364742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档