Задача и бизнес-контекст
Коммерческий отдел запрашивает реестр B2B-клиентов без контактных персональных данных. Отчёт должен содержать ровно одну строку на компанию.
Тема занятия: Список корпоративных клиентов. Результат — объяснить, какие записи должны быть в выдаче, и обосновать вычисление без слепого копирования запроса.
Работайте в два шага: сначала письменный прогноз по учебным данным, затем сверка с SQL. Ошибки в определении метрики нельзя исправить одной перестановкой синтаксиса.
Разбор логики и данных
Идентификатор и гранулярность — разные понятия. Колонка id описывает одну запись, тогда как company может повториться у нескольких клиентов. SELECT задаёт проекцию: лишние поля не только мешают чтению, но и увеличивают риск раскрытия ненужных данных.
Проверьте связь между ключом, уровнем детализации и агрегированием. Если в результате одна строка означает не то, что требуется руководителю, правильный синтаксис всё равно даёт неверный показатель.
- Определите единицу наблюдения и перечислите первичные ключи.
- Укажите фильтры и зафиксируйте включение граничных значений.
- Опишите ожидаемые столбцы и формат чисел или дат.
- Назовите контрольную сумму или число строк, по которым заметна ошибка.
Идентификатор клиента, а не его название, фиксирует сущность. Клиенты-тёзки не становятся одним клиентом; заказ — отдельная сущность.
Учебный SQL и результат
Ниже независимая демонстрация с вымышленными строками. Она поясняет приём, но не решает оцениваемую задачу следующего практического урока.
WITH leads(id,region,tier) AS (VALUES (1,'Тула','B2B'),(2,'Омск','B2C'),(3,'Омск','B2B')) SELECT id,region FROM leads WHERE tier='B2B' ORDER BY region,id;| id | region |
|---|---|
| 3 | Омск |
| 1 | Тула |
Прогноз сверяем с данными из VALUES: результат вычислен исполнением самостоятельного SQL-примера, а не скопирован из лаборатории. Обратите внимание на те поля, которые попали в итог, и те строки, которые исключены.
Сначала попробуйте восстановить эти строки по исходному VALUES без запуска; затем выполните запрос в своей безопасной SQLite-среде и сравните порядок, NULL и агрегаты.
Границы и типичные ошибки
Добавьте клиенту 14 тот же company. COUNT(*) изменится, но число различных названий не обязательно; заранее решите, что именно считает бизнес.
Важен не только итог, но и объяснимость: покажите, какая исходная запись приводит к изменению, и зачем выбран именно этот оператор SQL.
- Запишите прогноз: какие строки останутся после отбора или группировки?
- Измените ровно одно значение в независимом примере и пересчитайте ответ вручную.
- Проверьте отдельный крайний случай: совпадающий ключ, NULL, равная сумма или нулевой знаменатель (если применимо).
- Назовите ситуацию, где запрос выполняется без ошибки, но бизнес-вывод становится неверным.
Профессиональное погружение: Разбор рабочего выбора
Коммерческий реестр часто используют сотрудники с разными полномочиями. Для списка компаний достаточно устойчивого идентификатора, наименования и сегмента; контактные данные, адреса и платёжные реквизиты не нужны. Это одна из причин избегать SELECT * даже на небольшом наборе данных. В следующем месяце схема CRM может расшириться: новый столбец неожиданно попадёт в автоматическую выгрузку. Явный список полей делает контракт отчёта стабильным. Перед выводом реестра сравните количество уникальных клиентских id с количеством строк: если показатели различаются, возможно, вы незаметно присоединили дочернюю таблицу.
Самостоятельный разбор: Справочник организаций
Ситуация из работы аналитика
После переименования ООО «Вега» в ООО «Вега Север» устойчивый client_id остался прежним.
Проверьте, изменится ли число клиентов и почему отчёт не должен связывать сущности по строке названия.
Вопросы к разбору
- Какое определение показателя или фильтра пришлось бы уточнить у владельца данных для ситуации «Справочник организаций»?
- Для занятия «Список корпоративных клиентов» придумайте дополнительную контрольную запись, чтобы проверить требование, не используя боевые данные.
- На примере «Справочник организаций» объясните заказчику без технических терминов, почему при проверке результат изменился или остался прежним.
Самостоятельный практикум
Проверка контракта результата. Для данной лаборатории сначала составьте список ожидаемых колонок и проверьте одну строку результата вручную. Дубли и граничные значения не считайте случайным шумом.
Для занятия «Список корпоративных клиентов» определите минимум одну отрицательную проверку — данные, для которых неверное решение дало бы правдоподобный, но ошибочный результат.
Работая с интерактивным SQL, не переносите запрос из независимого примера: структура задания и скрытые контрольные данные отличаются. Пишите решение под контракт текущей задачи.
Как защитить результат
Соберите рабочий артефакт: Короткая спецификация реестра: кто одна строка, какие поля разрешены, какой фильтр действует и по чему сортировать.
После выполнения сформулируйте итог руководителю двумя предложениями: что именно считали и при каких данных результат может измениться.
- Можно ли проверить ожидаемые числа без выполнения SQL?
- Указан ли порядок строк, когда он важен?
- Действуют ли условия одинаково для новых данных?
- Не превратилось ли объединение или группировка в двойной подсчёт?
СправочникМатериалы задания и контрольные данные+
Задание от заказчика
Менеджер готовит адресную B2B-кампанию.
- Покажите только company и city.
- Оставьте segment = B2B.
- Отсортируйте названия по алфавиту.
Схема именно этого учебного задания
Перечень ниже — документация к доступному учебному набору, а не данные основного сайта. Имена столбцов следует писать точно, как в тренажёре.
[[TABLE]]
Таблица Колонка Тип
customers id INTEGER
Несколько строк для ручной сверки
[[TABLE]]
id company city segment
1 Альфа Москва B2B
2 Бета Казань B2C
Контрольный эксперимент к заданию «Список корпоративных клиентов»
Добавьте в customers двух покупателей с одним и тем же названием компании, но разными id и городами. В адресной выборке должны сохраняться две реальные сущности, а не одно сгруппированное название.
Практика на сайте
Проверьте свои навыки в настоящем тренажёре
Это одно обычное учебное задание. Его результат проверяется на сервере, но не сохраняет прогресс и не открывает платные материалы.
SQL-практика: Список корпоративных клиентов
Менеджер готовит адресную B2B-кампанию.
Задание
- Покажите только company и city.
- Оставьте segment = B2B.
- Отсортируйте названия по алфавиту.
customers 6 записей
idINTEGER | companyTEXT | cityTEXT | segmentTEXT |
|---|---|---|---|
| 1 | Альфа | Москва | B2B |
| 2 | Бета | Казань | B2C |
| 3 | Гамма | Тула | B2B |
| 4 | Дельта | Москва | B2C |
| 5 | Кедр | Пермь | B2B |
| 6 | Маяк | Самара | B2C |
Пробная проверка не сохраняет попытки и прогресс. Используются только учебные данные этого задания.