Напиши SQL-запрос для вычисления суммарного дохода магазина по дням за последнюю неделю из таблицы orders.
Для вычисления суммарного дохода магазина по дням за последнюю неделю из таблицы orders можно использовать следующий SQL-запрос (универсальный вариант для большинства СУБД):
sql
SELECT
DATE(order_date) AS day,
SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= CURRENT_DATE — INTERVAL ‘7 days’
GROUP BY DATE(order_date)
ORDER BY day ASC;
Здесь:
— `order_date` — столбец с датой и временем заказа (тип DATETIME или TIMESTAMP).
— `amount` — столбец с суммой каждого заказа.
— `CURRENT_DATE — INTERVAL ‘7 days’` — фильтр для выборки записей за последние 7 дней.
— `DATE(order_date)` — приведение даты к формату без времени для группировки по дням.
— `SUM(amount)` — суммарный доход за каждый день.
— `GROUP BY DATE(order_date)` — группировка по дням.
— `ORDER BY day ASC` — сортировка от старых дней к новым.
**Варианты для разных СУБД:**
Для MySQL:
sql
SELECT
DATE(order_date) AS day,
SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY DATE(order_date)
ORDER BY day ASC;
Для PostgreSQL:
sql
SELECT
order_date::date AS day,
SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= NOW() — INTERVAL ‘7 days’
GROUP BY order_date::date
ORDER BY day ASC;
Для SQLite:
sql
SELECT
DATE(order_date) AS day,
SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= DATE(‘now’, ‘-7 days’)
GROUP BY DATE(order_date)
ORDER BY day ASC;
**Строка для CSV:**
day,total_revenue
Пример результата в формате CSV (одна строка заголовка + данные):
day,total_revenue
2024-06-10,15200.00
2024-06-11,18400.50
2024-06-12,12300.75
2024-06-13,21000.00
2024-06-14,9800.25
2024-06-15,17600.00
2024-06-16,22100.80
**Советы по оптимизации:**
— Убедитесь, что на столбце `order_date` есть индекс — это значительно ускорит выборку при большом объёме данных.
— Если в таблице есть столбец статуса заказа (например, `status`), добавьте фильтр `AND status = ‘completed’`, чтобы учитывать только завершённые заказы.
— Если нужно учитывать отмены или возвраты, можно вычесть их через `SUM(CASE WHEN status = ‘refunded’ THEN -amount ELSE amount END)`.
