CASEを使ったCOUNT
CoddyのSQLジャーニー「応用」セクションの一部。レッスン 12/27。
集約関数の中に CASE 式を記述できます。ポイントは、COUNT が NULL を無視することです。そのため、ELSE のない CASE は、条件に一致する行だけをカウントします。
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersこれで、クエリ全体にフィルターをかけていなくても、active_count は 'active' 行の数になります。これは、今後作成するあらゆる複数指標ダッシュボードクエリの裏にある仕組みです。
チャレンジ
簡単利用可能なテーブルと列:
orders:id、customer_id、status
各 customer_id について、次を返してください:
customer_idtotal:その顧客が行った注文の合計shipped:status = 'shipped'である件数cancelled:status = 'cancelled'である件数
cancelled の注文が少なくとも1件ある顧客のみを返してください。customer_id の順に並べてください。
自分で試してみよう
SELECT customer_id,
COUNT(*) AS total,
-- shipped、cancelled を COUNT(CASE ...) で集計
FROM orders
GROUP BY customer_id
-- キャンセルが少なくとも1件ある顧客に絞り込む
ORDER BY customer_id
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
応用のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド