【初心者向け】SQLの DISTINCT と GROUP BY の違いと使い方を解説
はじめに
SQLを学び始めると、「同じ値をまとめて一覧表示したい」「件数を集計したい」といった場面に出会うことがあります。
そういったときに使用するのが DISTINCT
と GROUP BY
です。
この2つは、目的が似ているように見えるため、
「どう使い分ければいいかわからない」
「どちらを使っても同じなのでは?」
と思う方も多いのではないでしょうか?
本記事では、DISTINCT
と GROUP BY
の違いを整理し、使い分けの考え方を解説します。
users
テーブル
前提:以下のような users
テーブルを例にします。
id | name |
---|---|
1 | 山田 |
2 | 佐藤 |
3 | 山田 |
4 | 鈴木 |
5 | 山田 |
6 | 佐藤 |
DISTINCT
:重複を除いて一意にする
1. DISTINCT
は、重複した行を取り除き、ユニークな結果を取得するために使います。
SELECT DISTINCT name FROM users;
このクエリは、users
テーブルの中から name
カラムの重複を除いた一覧を取得します。
✅ 出力例
name |
---|
山田 |
佐藤 |
鈴木 |
✅ 特徴
-
DISTINCT
は 集計を行いません - 「重複のない値だけを取り出す」ことが目的です
GROUP BY
:グループごとに集計する
2. 一方 GROUP BY
は、特定のカラムでグループを作り、それぞれに対して集計を行うために使います。
SELECT name, COUNT(*) FROM users GROUP BY name;
このクエリは、name
ごとにデータをまとめて、それぞれの名前が何件あるかをカウントします。
✅ 出力結果
name | count |
---|---|
山田 | 3 |
佐藤 | 2 |
鈴木 | 1 |
✅ 特徴
- 集計関数(
COUNT
,SUM
,AVG
, ...)とセットで使う - 「グループごとに処理」したいときに使う
DISTINCT
と GROUP BY
の違いと使い分けまとめ
3. 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