VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
COUNT(*) は行がいくつあるかに答えます。COUNT(DISTINCT column) は異なる値が
いくつあるかに答えます。初めて見る列については、たいていこちらのほうが興味深い
質問です。
始める前に mysql -u root -p sakila でクライアントを開いてください。
COUNT DISTINCT の仕組み
COLUMN_NAME を異なる値を数えたい列に、TABLE_NAME をテーブルに置き換えます。
サーバーはすべての行を読み、重複を捨て、残ったものを数えます。
これは SELECT DISTINCT が返すものの件数を、それを
返さずに得るものです。
例
- 異なる値はいくつあるか
- 異なる組み合わせ
複数の列を指定すると、GROUP BY と同じように、1 つの組み合わせが 1 回
数えられます。
NULL を飛ばすため、答えが間違って見えることがある
address2 は 4 行で NULL、残りの 599 行で空文字列です。
SELECT COUNT(*) FROM address WHERE address2 IS NULL です。
まとめ
- 行ではなく異なる値を数えるには
COUNT(DISTINCT column)を使います。 - 異なる組み合わせを数えるには、複数の列を指定します。
- NULL は値として数えられず、飛ばされると考えてください。
- 両方の数が必要なときは、欠けている行を別に数えます。
関連項目
- 集計関数 — 同じ仲間の残り
- SELECT DISTINCT — 数える代わりにそれらの値を返す
- GROUP BY — カテゴリごとに数える
- MySQL の GROUP BY のパフォーマンス — 大規模な重複排除のコスト