Напиши SQL-запрос для выборки 5 самых доходных товаров из таблицы orders за текущий месяц.
Ниже представлен SQL-запрос, который выбирает 5 самых доходных товаров из таблицы `orders` за текущий месяц. Предполагается, что таблица содержит поля: `product_id` (идентификатор товара), `product_name` (название товара), `quantity` (количество), `price` (цена за единицу) и `order_date` (дата заказа).
sql
SELECT
product_id,
product_name,
SUM(quantity * price) AS total_revenue
FROM orders
WHERE
YEAR(order_date) = YEAR(CURRENT_DATE())
AND MONTH(order_date) = MONTH(CURRENT_DATE())
GROUP BY product_id, product_name
ORDER BY total_revenue DESC
LIMIT 5;
**Разбор запроса:**
1. **SELECT** — выбираем идентификатор товара, его название и суммарную выручку, вычисляемую как произведение количества на цену.
2. **FROM orders** — источник данных — таблица заказов.
3. **WHERE** — фильтрация по текущему месяцу и году с помощью функций `YEAR()` и `MONTH()` (синтаксис для MySQL/MariaDB). Для PostgreSQL используйте `DATE_TRUNC(‘month’, order_date) = DATE_TRUNC(‘month’, CURRENT_DATE)`, для MS SQL Server — `MONTH(order_date) = MONTH(GETDATE()) AND YEAR(order_date) = YEAR(GETDATE())`.
4. **GROUP BY** — группировка по товару для агрегации выручки.
5. **ORDER BY total_revenue DESC** — сортировка по убыванию дохода.
6. **LIMIT 5** — ограничение результата пятью строками.
**Адаптация для PostgreSQL:**
sql
SELECT
product_id,
product_name,
SUM(quantity * price) AS total_revenue
FROM orders
WHERE DATE_TRUNC(‘month’, order_date) = DATE_TRUNC(‘month’, CURRENT_DATE)
GROUP BY product_id, product_name
ORDER BY total_revenue DESC
LIMIT 5;
**Строка для CSV:**
Если нужно экспортировать результат в одну строку CSV-формата (заголовок + данные), она будет выглядеть так:
product_id,product_name,total_revenue
Пример реальной строки с данными:
101,Ноутбук ASUS VivoBook,154000.00
Для выгрузки всех 5 строк в CSV из MySQL можно использовать:
sql
SELECT product_id, product_name, SUM(quantity * price) AS total_revenue
FROM orders
WHERE YEAR(order_date) = YEAR(CURRENT_DATE()) AND MONTH(order_date) = MONTH(CURRENT_DATE())
GROUP BY product_id, product_name
ORDER BY total_revenue DESC
LIMIT 5
INTO OUTFILE ‘/tmp/top5_products.csv’
FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘»‘ LINES TERMINATED BY ‘n’;
Этот подход позволяет автоматически сохранять отчёт о топ-5 товарах в файл для дальнейшей обработки в Excel или BI-системах.
