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

チャレンジ

簡単

利用可能なテーブルとカラム:

  • <strong>orders</strong>: <strong>id</strong>, <strong>customer_id</strong>, <strong>status</strong>

customer_id に対して以下を返してください:

  • customer_id
  • total: その顧客が行った注文の総数
  • shipped: status = 'shipped' である件数
  • cancelled: status = 'cancelled' である件数

少なくとも1つのキャンセルされた注文がある顧客のみを返してください。customer_id で並べ替えてください。

チートシート

クエリ全体をフィルタリングせずに、条件に一致する行をカウントするには、COUNT の中で CASE を使用します(COUNTNULL を無視するため、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
quiz icon腕試し

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

応用のすべてのレッスン