#sql #postgresql #average #aggregate-functions #where-clause
#sql #postgresql #среднее #агрегатные функции #where-предложение
Вопрос:
Я хотел бы найти среднее значение столбца за 2 периода времени, но я не уверен, как отобразить оба в одном запросе. Я знаю, что приведенное ниже не будет работать, но я ищу правильный синтаксис:
SELECT
AVG(amount) AS avg_amt
FROM table
WHERE day >= date('2019-05-05') AND day<= date('2019-07-04'),
AVG(amount) AS avg_amt2
WHERE day >= date('2019-07-05') AND day<= date('2019-09-04')
Комментарии:
1. Я хотел бы повторить, но для другого периода времени для сравнения
Ответ №1:
Вы можете использовать это FILTER
предложение для агрегирования функций:
SELECT
AVG(amount) FILTER(WHERE day >= date '2019-05-05' AND day <= date '2019-07-04') AS avg_amt1,
AVG(amount) FILTER(WHERE day >= date '2019-07-05' AND day <= date '2019-09-04') AS avg_amt2
FROM table
Мы можем немного оптимизировать запрос с WHERE
помощью предложения:
SELECT
AVG(amount) FILTER(WHERE day <= date '2019-07-04') AS avg_amt1,
AVG(amount) FILTER(WHERE day >= date '2019-07-05') AS avg_amt2
FROM table
WHERE day >= date '2019-05-05' AND day <= date '2019-09-04'