По всем вопросам- @workakkk
@itchannels_telegram - 🔥лучшие ит-каналы
@ai_machinelearning_big_data - Machine learning
@pythonl - Python
@pythonlbooks- python книги📚
@datascienceiot - ml книги📚
РКН: https://vk.cc/cIi9vo
#VRHSZ
Post #1872
6.22K
🧩 Задача для SQL-аналитиков: "Пропавшие продажи"
📖 Описание задачи
У вас есть таблица
Каждый день формируется отчёт, где суммируются продажи по дням:
✅ Вчера сумма в отчёте была 1,000,000. Сегодня — 980,000, хотя новых записей не удаляли.
📝 Ваша задача:
1. Найти, какие записи "исчезли" из отчёта, если данных в таблице
2. Определить, почему эти записи больше не попадают в итоговый запрос.
3. Исправить отчёт, чтобы сумма снова стала 1,000,000.
Ограничения:
- Таблица не изменилась по количеству строк.
- Никто не менял код запроса.
-
Подсказка: возможно, дело в NULL, JOIN или неправильной агрегации.
🕵️ Что проверяет задача:
- Знание SQL-агрегации
- Понимание NULL и работы SUM
- Умение анализировать запросы «не через код», а через их результат
- Навык находить «скрытые» ошибки данных (например,
💡 Решение:
При проверке выяснится, что часть записей имеет `sale_date = NULL` (например, кто-то обновил поле
Итоговый запрос:
```sql
SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;
```
не учитывает строки, где `sale_date IS NULL`, потому что
Чтобы увидеть эти записи:
```sql
SELECT sale_date, COUNT(*), SUM(quantity * price)
FROM sales
GROUP BY sale_date;
```
Для восстановления суммы нужно добавить обработку NULL, например:
```sql
SELECT COALESCE(sale_date, 'unknown') AS sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY COALESCE(sale_date, 'unknown');
```
✅ Теперь сумма снова будет 1,000,000, а "пропавшие" продажи попадут в отдельную категорию
🎯 Эта задача учит:
✅ Всегда думать о данных, а не только о коде
✅ Проверять поля на NULL даже там, где их не ожидаешь
✅ Уметь объяснять ошибки «бизнес-заказчику», а не только исправлять запрос
🔥 Отличная тренировка внимательности и понимания нюансов SQL-агрегации!
@sqlhub
📖 Описание задачи
У вас есть таблица
sales, где хранятся данные о продажах:
CREATE TABLE sales (
sale_id INT PRIMARY KEY,
sale_date DATE,
product_id INT,
quantity INT,
price DECIMAL(10,2)
);
INSERT INTO sales (sale_id, sale_date, product_id, quantity, price) VALUES
(1, '2024-01-01', 101, 1, 100.00),
(2, '2024-01-02', 102, 2, 150.00),
-- ...
-- остальные данные
;
Каждый день формируется отчёт, где суммируются продажи по дням:
SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;
✅ Вчера сумма в отчёте была 1,000,000. Сегодня — 980,000, хотя новых записей не удаляли.
📝 Ваша задача:
1. Найти, какие записи "исчезли" из отчёта, если данных в таблице
sales фактически не удаляли.2. Определить, почему эти записи больше не попадают в итоговый запрос.
3. Исправить отчёт, чтобы сумма снова стала 1,000,000.
Ограничения:
- Таблица не изменилась по количеству строк.
- Никто не менял код запроса.
-
sale_date, quantity, price остались без изменений.Подсказка: возможно, дело в NULL, JOIN или неправильной агрегации.
🕵️ Что проверяет задача:
- Знание SQL-агрегации
- Понимание NULL и работы SUM
- Умение анализировать запросы «не через код», а через их результат
- Навык находить «скрытые» ошибки данных (например,
sale_date стал NULL)💡 Решение:
При проверке выяснится, что часть записей имеет `sale_date = NULL` (например, кто-то обновил поле
sale_date на NULL).Итоговый запрос:
```sql
SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;
```
не учитывает строки, где `sale_date IS NULL`, потому что
GROUP BY игнорирует NULL как отдельную группу (не попадает ни в один существующий `sale_date`).Чтобы увидеть эти записи:
```sql
SELECT sale_date, COUNT(*), SUM(quantity * price)
FROM sales
GROUP BY sale_date;
```
Для восстановления суммы нужно добавить обработку NULL, например:
```sql
SELECT COALESCE(sale_date, 'unknown') AS sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY COALESCE(sale_date, 'unknown');
```
✅ Теперь сумма снова будет 1,000,000, а "пропавшие" продажи попадут в отдельную категорию
unknown.🎯 Эта задача учит:
✅ Всегда думать о данных, а не только о коде
✅ Проверять поля на NULL даже там, где их не ожидаешь
✅ Уметь объяснять ошибки «бизнес-заказчику», а не только исправлять запрос
🔥 Отличная тренировка внимательности и понимания нюансов SQL-агрегации!
@sqlhub
- 👍 19
- 👎 5
- ❤ 4
- 🔥 3
- 😁 1







