Напиши SQL-запрос для вычисления общей суммы продаж по категориям товаров из таблиц orders и products.

Для вычисления общей суммы продаж по категориям товаров необходимо объединить таблицы orders и products через JOIN и сгруппировать результат по полю категории. Ниже приведён универсальный SQL-запрос, который подойдёт для большинства реляционных СУБД (PostgreSQL, MySQL, SQLite, MS SQL Server).

**Предполагаемая структура таблиц:**

Таблица `orders`:
— `id` — идентификатор заказа
— `product_id` — внешний ключ на таблицу products
— `quantity` — количество товара
— `price` — цена за единицу на момент заказа

Таблица `products`:
— `id` — идентификатор товара
— `name` — название товара
— `category` — категория товара

**Основной SQL-запрос:**

sql
SELECT
p.category AS category,
SUM(o.quantity * o.price) AS total_sales
FROM orders o
JOIN products p ON o.product_id = p.id
GROUP BY p.category
ORDER BY total_sales DESC;

**Разбор запроса:**

1. `FROM orders o` — основная таблица заказов с псевдонимом `o`.
2. `JOIN products p ON o.product_id = p.id` — соединяем с таблицей товаров по внешнему ключу.
3. `SUM(o.quantity * o.price)` — вычисляем итоговую сумму продаж как произведение количества на цену.
4. `GROUP BY p.category` — группируем результат по категории товара.
5. `ORDER BY total_sales DESC` — сортируем по убыванию суммы продаж.

**Если цена хранится только в таблице products:**

sql
SELECT
p.category AS category,
SUM(o.quantity * p.price) AS total_sales
FROM orders o
JOIN products p ON o.product_id = p.id
GROUP BY p.category
ORDER BY total_sales DESC;

**Дополнительно — с фильтрацией по периоду (если есть поле `created_at`):**

sql
SELECT
p.category AS category,
SUM(o.quantity * o.price) AS total_sales
FROM orders o
JOIN products p ON o.product_id = p.id
WHERE o.created_at BETWEEN ‘2024-01-01’ AND ‘2024-12-31’
GROUP BY p.category
ORDER BY total_sales DESC;

**Строка для CSV:**

category,total_sales

Эта строка является заголовком CSV-файла. Данные из результата запроса можно экспортировать командой `copy` в PostgreSQL или через `INTO OUTFILE` в MySQL, либо через любой клиент (DBeaver, TablePlus, pgAdmin).

**Советы по оптимизации:**
— Убедитесь, что поля `product_id` и `id` проиндексированы — это ускорит JOIN.
— При большом объёме данных используйте материализованные представления (Materialized View) для кэширования агрегатов.
— Для NULL-значений в `category` используйте `COALESCE(p.category, ‘Без категории’)`.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.