Menu
Coddy logo textTech

SUM с CASE

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

Та же идея работает с SUM: это даже более гибкий подход. CASE может возвращать 1 для подходящих строк и 0 для всех остальных или возвращать любое числовое значение, чтобы по-разному взвешивать строки.

SELECT
    SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
    SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM users

SUM(CASE … THEN 1 ELSE 0 END) и COUNT(CASE … THEN 1 END) дают одинаковый результат при подсчёте; выберите стиль, который предпочитает ваша команда.

challenge icon

Задание

Легко

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

  • <strong>transactions</strong>: <strong>id</strong>, <strong>category</strong>, <strong>type</strong>, <strong>amount</strong>

type — это либо 'sale', либо 'refund'. Для каждой category верните:

  • category
  • net_revenue: сумму значений sale минус сумму значений refund

Вычислите net_revenue в одном выражении SUM(CASE …), где возвраты учитываются как отрицательное число. Отсортируйте по net_revenue в порядке убывания.

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

SELECT category,
       -- один SUM(CASE ...), где возвраты считаются отрицательными
FROM transactions
GROUP BY category
quiz iconПроверьте себя

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

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

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