我试图获得前3名最延迟的公司按百分比(超过一个小时)。
下面是一个表的例子(ARR_DELAY是以分钟为单位,也意味着他们提前到达):
| 航空公司代码|到达_延迟|
| --|--|
| DL|-6个|
| DL| 123 |
| DL|四十七|
| DL| 32 |
也有独特的航空公司代码,但他们重复了很多(因为它每天发生)“AIRLINE_CODE”,“9 E”,“AA”,“AS”,“B6”,“DL”
Here is a code I have so far:
SELECT "ninteen_Flights"."AIRLINE_CODE",
100.0 * "ninteen_Flights"."ARR_DELAY" / sum("ninteen_Flights"."ARR_DELAY") OVER (PARTITION BY "ninteen_Flights"."AIRLINE_CODE") AS avg
FROM "ninteen_Flights"
GROUP BY "ninteen_Flights"."AIRLINE_CODE"
字符串
我知道代码是错误的。但是,我不知道如何得到我需要的结果.
我试图获得前3名最延迟的公司按百分比(超过一个小时)。
1条答案
按热度按时间yhqotfr81#
对于这一点,你不需要使用窗口查询,你可以用一个简单的
GROUP BY
来做到这一点。“most delayed”这个术语通常意味着我们询问的是延迟的 * 频率 *,而不是具体的累积或平均延迟,如果他们想要的话,他们会问的。我怀疑你真正想要的是:
**最常延误航班的前三家航空公司,其中延误超过1小时。
为此,我们实际上不会计算总的累积延误或类似的东西,我们只需要航班的数量,为此,我们可以使用
CASE
语句将数据投影到两组列中,我们可以比较:**注意:**在其他RDBMS(如SQL Server)中,我们可以对
NULL
值使用一些技巧来简化这种类型的逻辑,但在PostgreSQLCOUNT()
中,计数 * 所有 * 行,包括NULL
s。因此,我们将不使用NULL
,而是使用SUM()
和1和0字符串
小提琴:http://sqlfiddle.com/#!17/8 f4 e4/5