Корректность запросов

Гранулярность результата и уникальность ключа

Содержание курса

Какие столбцы отличают строки отчёта

В исходной таблице 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, а в неагрегированных выборках зависит от выполненных соединений, фильтров и исходной структуры данных.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.