Как в posgresql получить среднее в разных интервалах?

В PostgreSQL, чтобы получить среднее значение в разных интервалах, мы можем использовать функцию AVG() в сочетании с условными выражениями и агрегирующей функцией GROUP BY.

Предположим, у нас есть таблица sales, в которой содержится информация о продажах различных товаров. Каждая запись в таблице содержит поле amount, которое представляет сумму продажи, и поле date, которое представляет дату продажи.

Чтобы получить среднее значение продаж по различным интервалам времени, мы можем сначала сгруппировать записи по интервалам и затем применить функцию AVG() к полю amount. Например, мы можем сгруппировать продажи по годам:

SELECT date_trunc('year', date) AS year, AVG(amount) AS avg_amount
FROM sales
GROUP BY year
ORDER BY year;

В результате запроса будут показаны средние значения продаж для каждого года.

Аналогично, мы можем группировать продажи по месяцам или дням:

-- Группировка по месяцам
SELECT date_trunc('month', date) AS month, AVG(amount) AS avg_amount
FROM sales
GROUP BY month
ORDER BY month;

-- Группировка по дням
SELECT date_trunc('day', date) AS day, AVG(amount) AS avg_amount
FROM sales
GROUP BY day
ORDER BY day;

Мы также можем использовать условные выражения для определения интервалов, если у нас есть дополнительная информация в таблице. Например, если у нас есть поле category, которое указывает на категорию товара, мы можем сгруппировать продажи по категориям и интервалам времени:

SELECT category, 
       CASE 
         WHEN amount < 100 THEN 'Low'
         WHEN amount >= 100 AND amount < 500 THEN 'Medium'
         WHEN amount >= 500 THEN 'High'
       END AS interval,
       AVG(amount) AS avg_amount
FROM sales
GROUP BY category, interval
ORDER BY category, interval;

В этом примере мы используем условные выражения, чтобы определить категорию для каждой записи в таблице, и затем группируем записи по категориям и интервалам.

Таким образом, в PostgreSQL мы можем легко получать средние значения в различных интервалах времени, используя функцию AVG() в сочетании с агрегирующей функцией GROUP BY и условными выражениями.