🔖

【初心者向け】SQLの DISTINCT と GROUP BY の違いと使い方を解説

に公開

はじめに

SQLを学び始めると、「同じ値をまとめて一覧表示したい」「件数を集計したい」といった場面に出会うことがあります。
そういったときに使用するのが DISTINCTGROUP BY です。

この2つは、目的が似ているように見えるため、

「どう使い分ければいいかわからない」
「どちらを使っても同じなのでは?」

と思う方も多いのではないでしょうか?

本記事では、DISTINCTGROUP 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. DISTINCTGROUP BY の違いと使い分けまとめ

DISTINCTGROUP BY は、どちらも「データをまとめて扱う」ために使われる構文ですが、
目的や使い方が大きく異なります。

🔹 機能の違いを比較

観点 DISTINCT GROUP BY
主な目的 重複を取り除いて一覧を表示 同じ値ごとにグループ化して、集計関数を使って集計
集計関数の利用 使用しない よく使う(例:COUNT, SUM, AVG など)
SELECT で指定する列 基本すべての列 GROUP BY に指定した列、または集計関数を使った列

🔸 DISTINCT は、表示されるすべての列の組み合わせが重複していないかを見て、同じ組み合わせがあれば1件にまとめます。
🔸 GROUP BY は、指定した列の値ごとにデータをまとめて、グループ単位で件数や合計などを計算する処理に使われます。

🔹 どちらを使えばよいか迷ったら

やりたいこと 使う構文
重複を除いた一覧を表示したい(集計は不要) DISTINCT
件数・合計・平均などを求めたい(集計したい) GROUP BY + 集計関数 (COUNT など)

DISTINCT は「一覧表示したいけど重複はいらない」ときに向いています。
GROUP BY は「グループごとに集計して結果を出したい」ときに使うのが適しています。

おわりに

DISTINCTGROUP BY は、どちらも「データをまとめる」ように見えますが、使い方や目的には明確な違いがあります。

DISTINCT は「重複をなくしたいとき」、
GROUP BY は「グループごとに集計したいとき」に使うのが基本です。

この違いを意識するだけで、SQLのクエリがより明確になり、読みやすくなります。

本記事が、SQLを学ぶ際の一助になれば幸いです。


🔗 関連記事

Discussion