SQL Фильтрация двух агрегатных функций с различными условиями - PullRequest
0 голосов
/ 29 марта 2020

Я хочу получить разницу между

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

1 Ответ

2 голосов
/ 29 марта 2020

Вы можете использовать условное агрегирование:

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 имеет тип, который можно усреднить. Некоторые базы данных не хотят делать средние по дате / времени напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...