PostgreSQL で特定の列が重複する行を削除する DISTINCT ONは便利に使えました

PostgreSQL

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

特定列の重複を排除したい

特定列を排除したいという要件です。

DISTINCT ON

で、その特定列を指定すると、その特定列の重複を排除し、その他のカラムの値も取得できます。その他のカラムは、並び順の一番上の値が採用されます。

つまり特定グループの一番上の行を取得してくれる便利な機能になっています。

SQLで重複行を削除

重複行を削除する意味で、

DISTINCT :重複レコードを1つに

は知っていました。これは全てのカラムが同じ場合(同じレコードの場合)に一つにします。

メーカ 型番 種別

Dell Inspiron note

Dell Inspiron note

Dell Vostro note

HP Probook note

HP Proliant server

HP Proliant server

といった、データが入っているテーブルがあるとして、DISTINCTすると

メーカ 型番 種別

Dell Inspiron note

Dell Vostro note

HP Probook note

HP Proliant server

に集約されます。重複行が排除されています。

DISTINCT ON すると

メーカ 型番 種別 ユーザ

Dell Inspiron note user1

Dell Inspiron note user2

Dell Vostro note user3

HP Probook note user4

HP Proliant server user5

HP Proliant server user6

このようなテーブルから、

メーカ 型番 種別 ユーザ

Dell Inspiron note user1

Dell Vostro note user3

HP Probook note user4

HP Proliant server user5

こういうデータを作りたい時に利用するのが DISTINCT ON です。

SELECT DISTINCT ON(メーカ,型番,種別) * FROM table

ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions

ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions

DISCINCT ONする際に、特定カラムの重複を排除する場合は、ORDER BY を利用する際に、その特定列を指定する必要があります。

まとめ

特定グループごとに、先頭行をとる事ができる!のが

DISCINCT ON

です。

タイトルとURLをコピーしました