本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
特定列の重複を排除したい
特定列を排除したいという要件です。
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
です。