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