В 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
и условными выражениями.