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' な行の数になります。これは、今後作成するあらゆるマルチメトリックなダッシュボードクエリの背後にあるテクニックです。
チャレンジ
簡単利用可能なテーブルとカラム:
<strong>orders</strong>:<strong>id</strong>,<strong>customer_id</strong>,<strong>status</strong>
各 customer_id に対して以下を返してください:
customer_idtotal: その顧客が行った注文の総数shipped:status = 'shipped'である件数cancelled:status = 'cancelled'である件数
少なくとも1つのキャンセルされた注文がある顧客のみを返してください。customer_id で並べ替えてください。
チートシート
クエリ全体をフィルタリングせずに、条件に一致する行をカウントするには、COUNT の中で CASE を使用します(COUNT は NULL を無視するため、ELSE 句は省略します):
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users自分で試してみよう
SELECT customer_id,
COUNT(*) AS total,
-- COUNT(CASE ...) を使用した shipped、cancelled
FROM orders
GROUP BY customer_id
-- 少なくとも1つのキャンセルがある顧客でフィルタリング
ORDER BY customer_id
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。