Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

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

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

Чтобы создать свой счетчик, используйте 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 и другие неподходящие значения.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

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

Не желательно размещать 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-запросов, включая стремление к минимизации вызовов функций.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой оператор используется вместе с COUNT для подсчёта строк по условию?
1 / 5