【问题标题】:SQL Filter two aggregate functions with different conditionsSQL过滤两个不同条件的聚合函数
【发布时间】:2020-07-09 21:57:26
【问题描述】:

我想得到两者之间的区别

AVG(arr_delay_new) 
WHERE fl_date BETWEEN '2017/07/24' AND '2017/07/31'

AVG(arr_delay)_new 
WHERE fl_date BETWEEN '2017/07/01' AND '2017/07/23'

这个当然返回 0 并且没有日期条件。

SELECT 
    airline_name,
    AVG(arr_delay_new) - AVG(arr_delay_new)
FROM 
    Flight_delays F
JOIN 
    Airlines A ON A.airline_id = F.airline_id
GROUP BY 
    airline_name

【问题讨论】:

    标签: sql filter multiple-conditions


    【解决方案1】:

    您可以使用条件聚合:

    SELECT airline_name,
           (AVG(CASE WHEN fl_date BETWEEN '2017-07-24' and '2017-07-31' THEN arr_delay_new END) -
            AVG(CASE WHEN fl_date BETWEEN '2017-07-01' and '2017-07-23' THEN arr_delay_new END)
           ) as AVG_DIFF
    FROM Flight_delays F JOIN
         Airlines A
         ON A.airline_id = F.airline_id
    GROUP BY airline_name;
    

    这假定arr_delay_new 具有可以平均的类型。一些数据库不愿意直接对日期/时间进行平均。

    【讨论】:

    • 如果你使用 PostgreSql,有更简洁的方法可以做到:AVG(arr_delay_new) 过滤器(其中 fl_date 在 '2017-07-24' 和 '2017-07-31' 之间)
    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 2017-11-25
    • 2014-09-28
    • 1970-01-01
    • 2019-04-28
    • 2022-01-13
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多