Menu
Coddy logo textTech

CASEを使ったCOUNT

CoddyのSQLジャーニー「応用」セクションの一部。レッスン 12/27。

集約関数の中に CASE 式を記述できます。ポイントは、COUNTNULL を無視することです。そのため、ELSE のない CASE は、条件に一致する行だけをカウントします。

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

これで、クエリ全体にフィルターをかけていなくても、active_count'active' 行の数になります。これは、今後作成するあらゆる複数指標ダッシュボードクエリの裏にある仕組みです。

challenge icon

チャレンジ

簡単

利用可能なテーブルと列:

  • ordersidcustomer_idstatus

customer_id について、次を返してください:

  • customer_id
  • total:その顧客が行った注文の合計
  • shippedstatus = 'shipped' である件数
  • cancelledstatus = '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
quiz icon腕試し

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

応用のすべてのレッスン

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