Использование SQL COUNT в CASE: подсчёт строк по условию

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы создать свой счетчик, используйте SQL COUNT вместе с оператором CASE:

SQL
Скопировать код
SELECT 
  COUNT(CASE WHEN ваш_критерий THEN 1 END) AS ПользовательскийСчет
FROM ваша_таблица;

Например, подсчитайте количество исполненных заказов у следующим запросом:

SQL
Скопировать код
SELECT 
  COUNT(CASE WHEN статус_заказа = 'Исполнен' THEN 1 END) AS КоличествоИсполненных
FROM заказы;
Кинга Идем в IT: пошаговый план для смены профессии

Мониторинг с условием агрегатов

Агрегатные функции, такие как COUNT, при использовании вместе с CASE позволяют глубже исследовать данные, основываясь на критериях.

Учёт всех ситуаций

Добавьте в CASE условие ELSE для учёта всех возможных вариантов:

SQL
Скопировать код
SELECT
  COUNT(CASE 
          WHEN статус_заказа = 'Исполнен' THEN 1 
          ELSE 0 -- Учёт заказов, не соответствующих критерию
        END) AS КоличествоУчтенныхЗаказов
FROM заказы;

С помощью ELSE 0 вы исключите из подсчета строки с NULL и другие неподходящие значения.

Избегайте вложенных запросов

Не желательно размещать COUNT(CASE WHEN...) внутри другого запроса. Это повысит читабельность кода, упростит отладку и улучшит производительность.

Ясность при использовании псевдонимов колонок

Выбирайте имена для псевдонимов колонок таким образом, чтобы их легко было идентифицировать:

SQL
Скопировать код
SELECT
  COUNT(CASE WHEN тип_клиента = 'Новый' THEN 1 END) AS Новички,
  COUNT(CASE WHEN тип_клиента = 'Постоянный' THEN 1 END) AS ПостоянныеКлиенты
FROM клиенты;

Визуализация

Представим корзину фруктов, в которой количество каждого вида фрукта регулируется определёнными правилами:

Markdown
Скопировать код
В нашей фруктовой корзине есть:

- 🍎 Яблоки
- 🍌 Бананы
- 🍊 Апельсины
SQL
Скопировать код
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:

SQL
Скопировать код
SELECT
  COUNT(DISTINCT идентификатор_клиента) AS КоличествоУникальныхКлиентов
FROM заказы;

Вы обеспечите учет каждого клиента только один раз, что предотвратит искажение данных из-за повторений.

Обработка 'ALL'

При использовании COUNT по умолчанию применяется ALL, подсчитывающий все записи, включая дубликаты. Это важно учитывать, чтобы избежать неожиданно большого числа в результате.

Использование SUM для сложных условий

Иногда, для решения более сложных задач, предпочтительнее использовать SUM, а не COUNT:

SQL
Скопировать код
SELECT
  SUM(CASE WHEN год = 2021 THEN сумма ELSE 0 END) AS ОбщийОбъемПродаж2021
FROM продажи;

Таким образом, вы сможете не просто подсчитать количество заказов, но и вычислить их общую стоимость за определенный год. Это лишь один из инструментов в вашем приданом SQL-мастера! 🧙‍♂️🪄

Полезные материалы

  1. SQL CASE ExpressionДетальное руководство по применению оператора CASE в SQL.
  2. SQL COUNT() с GROUP BY – W3Resource — Руководство по использованию COUNT с GROUP BY для передачи данных в группы.
  3. SQL Aggregate Functions | Intermediate SQL – ModeОбширный учебник по агрегатным функциям SQL, таким как COUNT и SUM.
  4. Handling aggregate functions with CASE – Stack Overflow — Обсуждение в сообществе по использованию CASE вместе с агрегатными функциями.
  5. Оптимизация SQL-запросов — Советы по оптимизации SQL-запросов, включая стремление к минимизации вызовов функций.