3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【SQL入門】『GROUP BY』と『DISTINCT』|重複レコード削除

Last updated at Posted at 2020-03-28

この記事では、《重複レコード削除》について、
業務を通して学習した内容を、備忘録としてまとめています。

  • 『GROUP BY』と『DISTINCT』使うべきはどちらなのか…?

についてまとめています。

※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。

背景

重複レコードをまとめる時に…

GROUP BYDISTINCT どちらを使えばいいのか・・・?』

と疑問に思ったので、調べてみました。

【疑問】 使うべきはどちらなのか…?

  • DISTINCT

    ➡︎ テーブルから取得した結果から、重複している行を削除したい時に使う。
  • GROUP BY

    ➡︎ テーブルから取得した結果をグループ化して、集計したい時に使う。

つまり・・・

  • 単に、重複を除いた結果を取得する場合はDISTINCT
  • まとめ結果に対して、何らかの処理を加える必要がある場合はGROUP BY

ということになります。

last_name first_name
山田 太郎
山田 太郎
山田 太郎
山田 次郎
山田 次郎
山田 三郎

例えば・・・

上記のテーブルから同姓同名のレコードを1レコードに集約する場合…

SELECT
    last_name,
    first_name
FROM
    table_xxx
GROUP BY
    last_name,
    first_name;

上記ようなクエリではなく…

SELECT DISTINCT
    last_name,
    first_name
FROM
    table_xxx;

上記のクエリにすべきです。

last_name first_name
山田 太郎
山田 次郎
山田 三郎

では、GROUP BYはどう使うのか…?

➡︎ まとめたレコードを集計する場合に使う

last_name first_name
山田 太郎
山田 太郎
山田 太郎
山田 次郎
山田 次郎
山田 三郎

例えば・・・

上記のテーブルから同姓同名のレコードを集計する場合は、以下のように記述します。

SELECT
    last_name,
    first_name,
    COUNT(*) AS '人数'
FROM
    table_xxx
GROUP BY
    last_name,
    first_name;
last_name first_name 人数
山田 太郎 3
山田 次郎 2
山田 三郎 1

まとめ

  • DISTINCT

    ➡︎ テーブルから取得した結果から、重複している行を削除したい時に使う。
  • GROUP BY

    ➡︎ テーブルから取得した結果をグループ化して、集計したい時に使う。

【余談】
DISTINCTは、用途ははっきりしていますが…
使えるタイミングが限定的で、使用する機会はそれほど多くないと思います

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?