PostgreSQL вывод нескольких столбцов с использованием предложения where

#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'