Гранулярность результата и уникальность ключа
Содержание курса
Какие столбцы отличают строки отчёта
В исходной таблице orders каждую строку однозначно определяет столбец order_id: он уникален для каждого заказа. Но когда мы сворачиваем данные по клиентам, order_id в результат уже не входит.
Ключ выходной строки — это минимальный набор столбцов результата, значения которого уникальны для каждой строки этого отчёта.
Для полученного ранее отчёта по клиентам таким ключом служит client_id: каждому значению client_id соответствует строго одна строка (1 для Анны и 2 для Бориса).
Если задача требует посчитать расходы клиентов по дням, гранулярность меняется на «клиент за конкретную дату». Теперь одного client_id недостаточно: у одного клиента может быть несколько дат покупок. Ключом результата становится пара столбцов (client_id, order_date):
SELECT
client_id,
order_date,
SUM(total) AS total_spent
FROM orders
GROUP BY client_id, order_date
ORDER BY client_id, order_date;
Запрос возвращает 3 строки:
| client_id | order_date | total_spent |
|---|---|---|
| 1 | 2024-01-10 | 1000 |
| 1 | 2024-01-15 | 2000 |
| 2 | 2024-01-12 | 1500 |
Столбец client_id со значением 1 встречается дважды, но пара (client_id, order_date) не повторяется: даты 2024-01-10 и 2024-01-15 различают эти строки.
Ключ выходной строки не обязан совпадать с первичным ключом исходных таблиц. В агрегированных отчётах он определяется составом измерений в GROUP BY, а в неагрегированных выборках зависит от выполненных соединений, фильтров и исходной структуры данных.
