Назовите смысл одной строки
В таблице заказов одна строка соответствует одному заказу, а поле суммы описывает весь заказ. В таблице позиций одна строка соответствует отдельной позиции. Это разные уровни детализации. До объединения полезно записать, какой ключ уникален в каждом наборе и допускаются ли повторения. Название столбца не отвечает на эти вопросы автоматически. Если данные пришли из разных источников, отдельно проверяют также период, статусы и правила формирования записей. Иначе технически успешное соединение может объединить несопоставимые события.
Проследите размножение строки
Пусть заказы А, Б и В имеют суммы 100, 100 и 200 условных единиц. У А две позиции, у Б одна, а для В позиции в выгрузке отсутствуют. Левое соединение по номеру заказа сохранит все заказы. Для А появятся две строки, для Б одна, для В одна с отсутствующими данными позиции. Всего получится четыре строки. Сумма поля заказа теперь равна 500, хотя исходный итог составляет 400. Запрос не создавал денег: он повторно учёл сумму заказа А.
Удаление одинаковых сумм не исправляет смысл
Может показаться, что достаточно суммировать только уникальные значения суммы. Но у разных заказов А и Б одинаковая сумма 100, и оба должны учитываться. Сложение уникальных значений 100 и 200 даст 300, что тоже неверно. Исправление должно опираться на идентичность заказа, а не на совпадение числа. Возможный подход состоит в предварительном приведении данных позиций к одной строке на заказ или в отдельном расчёте показателя из таблицы заказов. Выбор зависит от вопроса отчёта.
Сохраняйте контрольные показатели
До и после соединения полезно сравнивать количество строк, число уникальных заказов и итоговые суммы. Расхождение не всегда является ошибкой: увеличение числа строк может быть ожидаемым для детализации. Но его влияние на показатель должно быть объяснено. Отсутствующие позиции заказа В также требуют отдельного вопроса к качеству или полноте данных. Нельзя молча считать их доказательством отсутствия покупки. Хороший отчёт сохраняет ограничения источника и позволяет другому человеку воспроизвести расчёт.
Попробуйте на практике
Проверьте пример трёх заказов на бумаге или в локальной учебной таблице. Подключение к рабочей базе не требуется.
- Создайте список заказов: А на 100, Б на 100 и В на 200. Посчитайте исходное количество заказов и общую сумму.
- Создайте список позиций: А1 и А2 относятся к А, Б1 относится к Б. Для В строк в этом списке нет.
- Выпишите результат левого соединения по заказу, сохранив В. Повторите сумму заказа в каждой полученной строке и сложите значения.
- Отдельно сложите уникальные числовые суммы. Сравните результат с исходным итогом и объясните, почему одинаковая стоимость не означает один заказ.
- Предложите способ получить итог по заказам без повторного учёта. Запишите контрольные значения и отдельный вопрос о недостающих позициях В.
Как проверить результат. Исходно три заказа на 400 единиц. После соединения четыре строки и ошибочная сумма 500; сумма уникальных чисел равна 300. Правильный итог сохраняет каждый заказ один раз и остаётся равным 400.
Частые вопросы
Всегда ли нужно избегать связи один ко многим?
Нет. Она часто правильно описывает данные. Нужно понимать получившуюся детализацию и выбирать расчёт, соответствующий смыслу показателя.
Поможет ли красивый график заметить эту ошибку?
Иногда необычный результат привлечёт внимание, но оформление не проверяет исходный расчёт. Контроль ключей, количества строк и сумм нужен до визуализации.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.