Использование SQL COUNT в CASE: подсчёт строк по условию
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы создать свой счетчик, используйте SQL COUNT вместе с оператором CASE:
SELECT
COUNT(CASE WHEN ваш_критерий THEN 1 END) AS ПользовательскийСчет
FROM ваша_таблица;
Например, подсчитайте количество исполненных заказов у следующим запросом:
SELECT
COUNT(CASE WHEN статус_заказа = 'Исполнен' THEN 1 END) AS КоличествоИсполненных
FROM заказы;
Мониторинг с условием агрегатов
Агрегатные функции, такие как COUNT
, при использовании вместе с CASE
позволяют глубже исследовать данные, основываясь на критериях.
Учёт всех ситуаций
Добавьте в CASE
условие ELSE для учёта всех возможных вариантов:
SELECT
COUNT(CASE
WHEN статус_заказа = 'Исполнен' THEN 1
ELSE 0 -- Учёт заказов, не соответствующих критерию
END) AS КоличествоУчтенныхЗаказов
FROM заказы;
С помощью ELSE 0
вы исключите из подсчета строки с NULL
и другие неподходящие значения.
Избегайте вложенных запросов
Не желательно размещать COUNT(CASE WHEN...)
внутри другого запроса. Это повысит читабельность кода, упростит отладку и улучшит производительность.
Ясность при использовании псевдонимов колонок
Выбирайте имена для псевдонимов колонок таким образом, чтобы их легко было идентифицировать:
SELECT
COUNT(CASE WHEN тип_клиента = 'Новый' THEN 1 END) AS Новички,
COUNT(CASE WHEN тип_клиента = 'Постоянный' THEN 1 END) AS ПостоянныеКлиенты
FROM клиенты;
Визуализация
Представим корзину фруктов, в которой количество каждого вида фрукта регулируется определёнными правилами:
В нашей фруктовой корзине есть:
- 🍎 Яблоки
- 🍌 Бананы
- 🍊 Апельсины
SELECT
COUNT(CASE WHEN тип_фрукта = 'Яблоки' THEN 1 END) AS КоличествоЯблок,
COUNT(CASE WHEN тип_фрукта = 'Бананы' THEN 1 END) AS КоличествоБананов,
COUNT(CASE WHEN тип_фрукта = 'Апельсины' THEN 1 END) AS КоличествоАпельсинов
FROM корзина_с_фруктами;
Такой подход в запросах позволяет точно учесть содержимое нашей виртуальной корзины с фруктами. 🍊🍌🍎
Исследование функции COUNT
Понимание функций SQL на глубоком уровне добавляет мощности ваших запросов. Рассмотрим некоторые особенности использования COUNT
.
Подсчёт уникальных значений
Для подсчёта уникальных значений используйте DISTINCT
:
SELECT
COUNT(DISTINCT идентификатор_клиента) AS КоличествоУникальныхКлиентов
FROM заказы;
Вы обеспечите учет каждого клиента только один раз, что предотвратит искажение данных из-за повторений.
Обработка 'ALL'
При использовании COUNT
по умолчанию применяется ALL
, подсчитывающий все записи, включая дубликаты. Это важно учитывать, чтобы избежать неожиданно большого числа в результате.
Использование SUM для сложных условий
Иногда, для решения более сложных задач, предпочтительнее использовать SUM
, а не COUNT
:
SELECT
SUM(CASE WHEN год = 2021 THEN сумма ELSE 0 END) AS ОбщийОбъемПродаж2021
FROM продажи;
Таким образом, вы сможете не просто подсчитать количество заказов, но и вычислить их общую стоимость за определенный год. Это лишь один из инструментов в вашем приданом SQL-мастера! 🧙♂️🪄
Полезные материалы
- SQL CASE Expression — Детальное руководство по применению оператора CASE в SQL.
- SQL COUNT() с GROUP BY – W3Resource — Руководство по использованию COUNT с GROUP BY для передачи данных в группы.
- SQL Aggregate Functions | Intermediate SQL – Mode — Обширный учебник по агрегатным функциям SQL, таким как COUNT и SUM.
- Handling aggregate functions with CASE – Stack Overflow — Обсуждение в сообществе по использованию CASE вместе с агрегатными функциями.
- Оптимизация SQL-запросов — Советы по оптимизации SQL-запросов, включая стремление к минимизации вызовов функций.