【SQL】重複行はDISTINCTとGROUP BYどちらで除去するか

sql-distinct-groupby
  • URLをコピーしました!

SQL文で検索した結果に対して重複したレコードを取り除く(または、まとめる)場合、DISTINCTGROUP BYを使うと思います。
SQLに慣れてないと、どちらも同じような機能だと勘違いしますが、一般的には単純に重複行削除する場合はDISTINCT、レコードを集計する目的の場合はGROUP BYを使用します。
書き方次第では結果になります

そこで今回は、DISTINCTGROUP BYの違いと、適切な使い方やサンプルコードをご紹介します!

目次

DISTINCTとGROUP BYの違い

DISTINCT重複行取り除くために使用されますが、GROUP BYは特定のカラムまたはカラムの組み合わせに基づいて行をグループ化し、グループごとの集計を行うために使用されます。
つまり、DISTINCT重複行を単純に削除するために使用されますが、GROUP BYグループごとの集計を行うために使用されます。どちらが最適かは使用目的によって異なります。

DISTINCTで重複行を削除する場合

DISTINCTは、テーブル内の重複行を取り除き、ユニークな行のみを取得する必要がある場合に使用されます。例えば、特定のカラムに対して重複する値がある場合、DISTINCTを使用することで重複行削除してユニークな値のみを表示することができます。

GROUP BYでグループごとの集計をする場合

GROUP BYは、特定のカラムまたはカラムの組み合わせに基づいて行をグループ化し、グループごとの集計を行う場合に使用されます。
例えば、顧客ごとの売上額の合計を算出する場合、顧客名のカラムに対してGROUP BYを使用することでグループごとに売上額を集計することができます。
また、複数のカラムを組み合わせてグループ化することもできます。
例えば、都市名と国名に基づいてグループ化することもできます。

管理者

・DISTINCTは重複行を「削除」
・GROUP BYは重複行を「グループ化」
つまり、消すかまとめるかの違いですね!

DISTINCTとGROUP BYの書き方

まずは、DISTINCTGROUP BYを使った、基本的なSQLのサンプルコードをご紹介します。

DISTINCTの書き方

以下がDISTINCTを使ったSQLサンプルコードです

このSQLは、テーブル内の重複行を取り除き、column1、column2、…といった特定のカラムのユニークな値のみを表示します。

GROUP BYの書き方

以下がGROUP BYを使ったSQLサンプルコードです:

このSQLは、table_nameテーブル内のcolumn1カラムに基づいて行をグループ化し、column2カラムの合計値を算出します。
つまり、column1カラムに対してグループごとにcolumn2カラムの合計値を表示することができます。

DISTINCTとGROUP BYの結果は必ず同じではない

DISTINCTは、テーブル内の重複行を取り除き、ユニークな行のみを返すことを目的としています。

一方、GROUP BYは、特定のカラムまたはカラムの組み合わせに基づいて行をグループ化し、グループごとの集計を行うことを目的としていますので、グループ化により重複行が取り除かれることはありますが、グループごとの集計の目的から考えると、単純な重複行の削除ではなく、グループごとの統計情報を算出することが目的です。

したがって、DISTINCTGROUP BY異なる目的を持っているため、異なる結果を返すことがあります。

DISTINCTとGROUP BYで同じ結果を返す方法

SQL重複レコードを除去するには、次の2つの方法があります。

DISTINCTで重複行を除去(削除)

単純にDISTINCTSELECTの後ろに付けるだけで削除してくれます。

GROUP BYで重複行を除去(グループ化)

GROUP BYユニークグループ化)にしたいカラム全てを記述する必要があります。

これらの2つの方法は、テーブル内の重複行を取り除くために使用することができます。
また、GROUP BYを使用すると、グループごとの集計も行うことができます。

著:yoku0825, 著:坂井 恵, 著:鶴長 鎮一, 著:とみた まさひろ, 著:深町 日出海, 著:福山 裕大, 著:班石 悦夫, 著:山﨑 由章
¥3,762 (2024/11/11 20:34時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次