Группировка и маркировка данных
Превращайте значения в категории
«Группировка и маркировка данных» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Что такое разбиение на категории
Разбиение на категории означает объединение исходных значений в именованные категории — преобразование чисел, дат или кодов в понятные человеку метки.
Вместо оценки 87 вы показываете "Хорошо". Вместо возраста 14 вы показываете "Подросток". Ваш главный инструмент для этого — выражение CASE.
Пример таблицы: заказы
На протяжении всего урока мы будем использовать таблицу заказов. В каждой строке указаны сумма заказа и код состояния.
Выполните приведённый ниже запрос, чтобы увидеть данные, с которыми мы работаем.
SELECT id, customer, amount, status
FROM orders
ORDER BY id;Добавление меток с помощью CASE WHEN
Самый простой способ разбить значения на категории — проверить условие и назначить метку. Блок CASE WHEN ... THEN ... ELSE ... END возвращает новую строку для каждой строки.
Здесь мы обозначаем каждый заказ как 'Большой' или 'Маленький' в зависимости от его суммы.
SELECT id,
amount,
CASE
WHEN amount >= 500 THEN 'Large'
ELSE 'Small'
END AS order_size
FROM orders;Несколько категорий с цепочками WHEN
Можно добавить столько предложений WHEN, сколько необходимо. SQL проверяет их сверху вниз и останавливается на первом совпадении.
В этом примере суммы разделены на три уровня: маленькие, средние и большие.
SELECT id,
amount,
CASE
WHEN amount < 100 THEN 'Small'
WHEN amount < 500 THEN 'Medium'
ELSE 'Large'
END AS order_tier
FROM orders;Разбиение текстовых значений на категории
Категории предназначены не только для чисел. Можно сопоставлять точные текстовые значения и заменять их более понятными метками.
Здесь исходные коды состояния 'P', 'S' и 'C' превращаются в понятные слова.
SELECT id,
status,
CASE status
WHEN 'P' THEN 'Pending'
WHEN 'S' THEN 'Shipped'
WHEN 'C' THEN 'Cancelled'
ELSE 'Unknown'
END AS status_label
FROM orders;Использование простой формы CASE
Когда вы сравниваете один столбец с несколькими фиксированными значениями, простая форма CASE (CASE column WHEN value ...) короче и понятнее, чем повторение имени столбца в каждом предложении WHEN.
Результат будет тем же, что и при использовании поисковой формы.
SELECT id,
CASE status
WHEN 'P' THEN 'Pending'
WHEN 'S' THEN 'Shipped'
WHEN 'C' THEN 'Cancelled'
ELSE 'Unknown'
END AS status_label
FROM orders;Разбиение на категории внутри GROUP BY
Получив метку категории, можно сгруппировать строки по ней и подсчитать, сколько строк относится к каждой категории. Оберните всё выражение CASE в GROUP BY.
Этот запрос показывает, сколько заказов относится к маленьким, средним и большим.
SELECT
CASE
WHEN amount < 100 THEN 'Small'
WHEN amount < 500 THEN 'Medium'
ELSE 'Large'
END AS order_tier,
COUNT(*) AS total_orders
FROM orders
GROUP BY
CASE
WHEN amount < 100 THEN 'Small'
WHEN amount < 500 THEN 'Medium'
ELSE 'Large'
END;Разбиение на категории с псевдонимом подзапроса
Повторять длинный блок CASE в GROUP BY многословно. Более аккуратный подход — обернуть основной запрос в подзапрос (или CTE), чтобы напрямую обращаться к псевдониму.
SELECT order_tier, COUNT(*) AS total_orders
FROM (
SELECT
CASE
WHEN amount < 100 THEN 'Small'
WHEN amount < 500 THEN 'Medium'
ELSE 'Large'
END AS order_tier
FROM orders
) AS bucketed
GROUP BY order_tier;Числовые категории: возрастные группы
Группировка по возрасту — классический пример использования разбиения на категории. Приведённый ниже запрос назначает каждому клиенту именованную возрастную группу.
Обратите внимание, что условия идут от меньшего к большему: SQL останавливается на первом истинном WHEN, поэтому порядок имеет значение.
SELECT name,
age,
CASE
WHEN age < 13 THEN 'Child'
WHEN age < 18 THEN 'Teen'
WHEN age < 65 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM customers;Добавление меток NULL в категории
Если значение равно NULL, ни одно условие WHEN (кроме IS NULL) не сопоставится с ним. Без явной проверки значения NULL перейдут в ветвь ELSE.
Добавьте предложение WHEN column IS NULL, чтобы назначить значениям NULL отдельную метку.
SELECT id,
amount,
CASE
WHEN amount IS NULL THEN 'No Data'
WHEN amount < 100 THEN 'Small'
WHEN amount < 500 THEN 'Medium'
ELSE 'Large'
END AS order_tier
FROM orders;Разбиение на категории в ORDER BY
Вы также можете использовать выражение CASE непосредственно внутри ORDER BY, чтобы управлять приоритетом сортировки без добавления нового столбца.
Приведённый ниже пример всегда выводит сначала ожидающие заказы, затем отправленные и затем отменённые.
SELECT id, customer, status
FROM orders
ORDER BY
CASE status
WHEN 'P' THEN 1
WHEN 'S' THEN 2
WHEN 'C' THEN 3
ELSE 4
END;Быстрая проверка
Проверьте, насколько хорошо вы понимаете разбиение данных на категории и добавление меток с помощью CASE.
Итоги урока
Отличная работа! Вот что вы изучили о разбиении данных на категории и добавлении меток:
- Разбиение на категории преобразует исходные значения в именованные категории с помощью
CASE WHEN. - Цепочки предложений
WHENсоздают несколько категорий; SQL останавливается на первом совпадении. - Простая форма CASE (
CASE col WHEN val) идеально подходит для сравнения одного столбца с фиксированными значениями. - Можно выполнить GROUP BY по выражению
CASE, чтобы подсчитать строки в каждой категории. - Всегда обрабатывайте
NULLявно с помощьюWHEN col IS NULL, чтобы назначить ему понятную метку. CASEтакже работает внутриORDER BY, позволяя задать собственный приоритет сортировки.
Разбиение на категории делает отчёты гораздо понятнее, заменяя исходные коды и числа ясными описательными метками.
Часто задаваемые вопросы
Урок «Группировка и маркировка данных» бесплатный?
Да — полный текст урока «Группировка и маркировка данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Группировка и маркировка данных»?
Превращайте значения в категории Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Группировка и маркировка данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выражение CASE
- Поисковый и простой CASE
- Группировка и маркировка данных
- CASE в ORDER BY и агрегатах