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 usersSUM(CASE … THEN 1 ELSE 0 END) と COUNT(CASE … THEN 1 END) は、カウントにおいて同じ結果を返します。チームが好むスタイルを選択してください。
チャレンジ
簡単利用可能なテーブルとカラム:
<strong>transactions</strong>:<strong>id</strong>,<strong>category</strong>,<strong>type</strong>,<strong>amount</strong>
type は 'sale' または 'refund' のいずれかです。各 category について、以下を返してください:
categorynet_revenue: 売上額の合計から返金額の合計を差し引いたもの
返金を負の数として扱う単一の SUM(CASE …) 式で net_revenue を計算してください。net_revenue の降順で並べ替えてください。
自分で試してみよう
SELECT category,
-- 返金を負の値としてカウントする1つの SUM(CASE ...)
FROM transactions
GROUP BY category
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。