Menu
Coddy logo textTech

CASE を使った SUM

CoddyのSQLジャーニー「応用」セクションの一部。レッスン 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:販売額の合計から返金額の合計を差し引いた値

返金の金額を負の数として扱い、単一の SUM(CASE …) 式で net_revenue を計算します。net_revenue の降順で並べ替えます。

自分で試してみよう

SELECT category,
       -- 返金を負としてカウントする1つの SUM(CASE ...)
FROM transactions
GROUP BY category
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

応用のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド