DISTINCTを使うと一意の値を簡単に取得することができます。
SELECTの後ろにDISTINCTとつけるだけなのでGROUP BYより簡単に取得することができます。
動作環境
この記事はSQL FIDDLEでMySQL5.6、PostgreSQL9.6、SQLiteで動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。
DISTINCTで一意の値を表示しよう
サンプルコードで実際にDISTINCTの動きを確認してみましょう。
準備
以下の内容のテーブルを使用します。
ItemID | ItemName | Quantity | AREA |
---|---|---|---|
1 | プリン | 25 | 大阪 |
2 | ゼリー | 20 | 大阪 |
3 | ゼリー | 30 | 東京 |
4 | プリン | 15 | 大阪 |
5 | プリン | 60 | 東京 |
6 | プリン | 25 | 大阪 |
7 | ゼリー | 20 | 東京 |
上記テーブルの作成用コードです。
— CREATE文 item テーブル
CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
ItemName character varying (20),
Quantity numeric(8, 0),
AREA character varying (20),
primary key(ItemID)
);
— itemテーブル用INSERT文
insert into item
values(0001, ‘プリン’, 25, ‘大阪’),
(0002, ‘ゼリー’, 20, ‘大阪’),
(0003, ‘ゼリー’, 30, ‘東京’),
(0004, ‘プリン’, 15,’大阪’),
(0005, ‘プリン’, 60, ‘東京’),
(0006, ‘プリン’, 25, ‘大阪’),
(0007, ‘ゼリー’, 20, ‘東京’);
1カラムで一意の値を取得
ItemNameで一意の値を表示します。
SELECT DISTINCT
ItemName
FROM item;
■ 結果
ItemName |
---|
プリン |
ゼリー |
複数カラムの組み合わせで一意の値を取得
通常のSELECT文と同じように書くだけです。
SELECT DISTINCT
ItemName
,AREA
FROM item;
■ 結果
ItemName | AREA |
---|---|
プリン | 大阪 |
ゼリー | 大阪 |
ゼリー | 東京 |
プリン | 東京 |
おわり
簡単すぎてGROUP BY使う気になれないですね。
関連:重複の件数を出す方法はこちらにまとめています。