Menu
Coddy logo textTech

COUNT с CASE

Часть раздела Продвинутый уровень путешествия по SQL на Coddy. Урок 12 из 27.

Вы можете поместить выражение CASE внутрь агрегатной функции. Секрет в том, что COUNT игнорирует NULL, поэтому CASE без ELSE подсчитывает только строки, соответствующие условию.

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

Теперь active_count — это количество строк 'active', хотя мы не фильтровали весь запрос. В этом заключается хитрость каждого запроса для дашборда с несколькими метриками, который вам когда-либо придётся написать.

challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • orders: id, customer_id, status

Для каждого customer_id верните:

  • customer_id
  • total: общее количество заказов, размещённых этим клиентом
  • shipped: количество записей, где status = 'shipped'
  • cancelled: количество записей, где status = 'cancelled'

Верните только тех клиентов, у которых есть как минимум один отменённый заказ. Отсортируйте по customer_id.

Попробуйте сами

SELECT customer_id,
       COUNT(*) AS total,
       -- отправленные, отменённые с помощью COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- фильтр клиентов с хотя бы одной отменой
ORDER BY customer_id
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Продвинутый уровень

Потренируйтесь самостоятельно: Песочница SQL