DISTINCT は結果から重複する行を取り除き、一意な値だけを返します。ある列(または列の組み合わせ)の異なる値を取得するために使われ、一意なエントリを見つけたりドロップダウンリストを作成したりするのによく用いられます。
DISTINCT — 一意な値
-- get the unique countries (no duplicates)
country users;
country, city users;
DISTINCT は結果から重複する行を取り除き、一意な値だけを返します。ある列(または列の組み合わせ)の異なる値を取得するために使われ、一意なエントリを見つけたりドロップダウンリストを作成したりするのによく用いられます。
-- get the unique countries (no duplicates)
country users;
country, city users;
DISTINCT は選択されたすべての列をまとめて対象とします。DISTINCT country, city は一意な組み合わせを返すのであって、一意な国と一意な都市を別々に返すわけではありません。
-- count how many UNIQUE countries there are
SELECT COUNT(DISTINCT country) FROM users;
-- vs COUNT(*) which counts all rows (with duplicates)
SELECT COUNT(*) FROM users;
COUNT(DISTINCT column) は一意な値の数を数えます。「異なる X はいくつあるか?」という問いに役立ちます。
-- find values that appear MORE THAN ONCE (duplicates)
SELECT email, COUNT(*) AS count
FROM users
GROUP BY email
HAVING COUNT(*) > 1; -- groups with more than one row = duplicates
重複を(取り除くのではなく)見つけるには、GROUP BY + HAVING COUNT(*) > 1 を使います。これにより、どの値が重複していて、それが何回現れるかが分かります。
-- these are often equivalent for getting unique values:
SELECT DISTINCT country FROM users;
SELECT country FROM users GROUP BY country;
-- GROUP BY is more flexible (can add aggregates); DISTINCT is simpler for pure deduplication
DISTINCT requires the database to compare/sort rows to find uniques → can be costly
on large datasets. Often a sign you might restructure the query (e.g. a JOIN producing
duplicates that DISTINCT then removes — consider whether the JOIN is the issue).
DISTINCT は重複を扱うための有用で頻繁に必要となる SQL 機能です。一意な値を取得することはよくあるニーズ(ドロップダウン用の一意なカテゴリ、異なるエントリ、一意な項目の数え上げ)であり、これを理解することは実践的な日常知識です。
DISTINCT の動作(重複する行を取り除くこと、そして複数列に対しては一意な組み合わせを返すこと — よくある混乱の元)と、一意な値を数えるための COUNT(DISTINCT) の使い方を知っておけば、典型的な用途はカバーできます。
同じくらい価値があるのが、実際の重複を見つける方法(GROUP BY + HAVING COUNT(*) > 1 を使う)を知ることです。これはデータのクリーニングや検証(重複したメールアドレスやレコードの特定など)にとってよくある重要なタスクです。
DISTINCT と GROUP BY の関係(重複排除では多くの場合同等で、GROUP BY のほうがより柔軟)と、パフォーマンスに関する注意(DISTINCT は比較やソートを必要とし、コストが高くなり得ること、そして時に JOIN が不要な重複を生み出していることを示すサインであること)を理解しておくのも有用です。
重複の扱い — それを取り除くこと(DISTINCT)と見つけること(GROUP BY/HAVING)の両方 — はクエリ作成やデータ品質の作業でよくある実践的なニーズであり、DISTINCT の動作(特に複数列での動作)とその代替手段を理解することは混乱や非効率を防ぐため、DISTINCT を使って重複を扱う方法を知っていることは、一意な値を含むことが多く必要とすることも多い実データを扱う際に、有用で頻繁に活用される知識です。