【初心者向け】SQLの DISTINCT と GROUP BY の違いと使い方を解説
はじめに
SQLを学び始めると、「同じ値をまとめて一覧表示したい」「件数を集計したい」といった場面に出会うことがあります。
そういったときに使用するのが DISTINCT と GROUP BY です。
この2つは、目的が似ているように見えるため、
「どう使い分ければいいかわからない」
「どちらを使っても同じなのでは?」
と思う方も多いのではないでしょうか?
本記事では、DISTINCT と GROUP BY の違いを整理し、使い分けの考え方を解説します。
前提:users テーブル
以下のような users テーブルを例にします。
| id | name |
|---|---|
| 1 | 山田 |
| 2 | 佐藤 |
| 3 | 山田 |
| 4 | 鈴木 |
| 5 | 山田 |
| 6 | 佐藤 |
1. DISTINCT:重複を除いて一意にする
DISTINCT は、重複した行を取り除き、ユニークな結果を取得するために使います。
SELECT DISTINCT name FROM users;
このクエリは、users テーブルの中から name カラムの重複を除いた一覧を取得します。
✅ 出力例
| name |
|---|
| 山田 |
| 佐藤 |
| 鈴木 |
✅ 特徴
-
DISTINCTは 集計を行いません - 「重複のない値だけを取り出す」ことが目的です
2. GROUP BY:グループごとに集計する
一方 GROUP BY は、特定のカラムでグループを作り、それぞれに対して集計を行うために使います。
SELECT name, COUNT(*) FROM users GROUP BY name;
このクエリは、name ごとにデータをまとめて、それぞれの名前が何件あるかをカウントします。
✅ 出力結果
| name | count |
|---|---|
| 山田 | 3 |
| 佐藤 | 2 |
| 鈴木 | 1 |
✅ 特徴
- 集計関数(
COUNT,SUM,AVG, ...)とセットで使う - 「グループごとに処理」したいときに使う
3. DISTINCT と GROUP BY の違いと使い分けまとめ
DISTINCT と GROUP BY は、どちらも「データをまとめて扱う」ために使われる構文ですが、
目的や使い方が大きく異なります。
🔹 機能の違いを比較
| 観点 | DISTINCT |
GROUP BY |
|---|---|---|
| 主な目的 | 重複を取り除いて一覧を表示 | 同じ値ごとにグループ化して、集計関数を使って集計 |
| 集計関数の利用 | 使用しない | よく使う(例:COUNT, SUM, AVG など) |
SELECT で指定する列 |
基本すべての列 |
GROUP BY に指定した列、または集計関数を使った列 |
🔸
DISTINCTは、表示されるすべての列の組み合わせが重複していないかを見て、同じ組み合わせがあれば1件にまとめます。
🔸GROUP BYは、指定した列の値ごとにデータをまとめて、グループ単位で件数や合計などを計算する処理に使われます。
🔹 どちらを使えばよいか迷ったら
| やりたいこと | 使う構文 |
|---|---|
| 重複を除いた一覧を表示したい(集計は不要) | DISTINCT |
| 件数・合計・平均などを求めたい(集計したい) |
GROUP BY + 集計関数 (COUNT など) |
✅
DISTINCTは「一覧表示したいけど重複はいらない」ときに向いています。
✅GROUP BYは「グループごとに集計して結果を出したい」ときに使うのが適しています。
おわりに
DISTINCT と GROUP BY は、どちらも「データをまとめる」ように見えますが、使い方や目的には明確な違いがあります。
DISTINCT は「重複をなくしたいとき」、
GROUP BY は「グループごとに集計したいとき」に使うのが基本です。
この違いを意識するだけで、SQLのクエリがより明確になり、読みやすくなります。
本記事が、SQLを学ぶ際の一助になれば幸いです。
🔗 関連記事
Discussion