とにかくSQLを楽しく、効率的に学ぼうという趣旨の記事です。
今回はDISTINCTを解説します。
重複をまとめてくれる非常に便利な機能となっています。
DISTINCTとは?
DISTINCTは重複をまとめてくれる非常に便利な機能です。
苗字 | 名前 |
---|---|
山田 | 太郎 |
山田 | たかし |
山田 | 太郎 |
鈴木 | 太郎 |
↑のような表があったとします。
山田太郎が2人いますね。
山田姓は3人います。
では、一行コードを書いてみましょう。
SELECT DISTINCT 苗字 FROM 名前;
苗字 |
---|
山田 |
鈴木 |
ものすごくスマートになります。
続いて
SELECT DISTINCT 苗字,名前 FROM 名前;
苗字 | 名前 |
---|---|
山田 | 太郎 |
山田 | たかし |
鈴木 | 太郎 |
抽出項目に名前を追加しました。
こちらでは山田姓が2人になりました。
基本構文
SELECT DISTINCT 列名 FROM テーブル名
基本的には↑のように使います。
DISTINCTの後に書いた列名が重複削除の対象となります。
粒度を意識することが大切
粒度とは情報のあらさです。
誰か一人をイメージしてみてください。
その人はどこに住んでいますか?
性別は?
年齢は?
身長は?
苗字は?
名前は?
アキネーターのように質問を続けていくと、いつかその人にたどり着けるかもしれませんよね。
ようするに粒度を意識するということは、情報をどのレベルの詳しさで見るかということと直結しています。
あなたが必要な情報は、居住場所別の販売数ですか?
性別ですか?
年齢別ですか?
もしくは性別と年齢別、両方ですか?
重複を省くということは、自分にとって必要のない粒度、年齢別データであれば身長など、なくてもいい部分の重なりを省くということなんです。
この考え方はGROUP BYていう集計機能にもつながってくるよ
山田太郎が2人いてもいい場合
問い合わせのあった顧客数を計算したい場合、同じ人を2回カウントするとまずいですよね。
問い合わせのあった区分(故障か料金確認か)の数を計算したい場合、同じ人を省くとまずいですよね。
どんな数値を出したいかによって必要な情報をは変わってくるのです。
複数列でDISTINCTを使うということ
素朴な疑問として、DISTINCTは複数の列に使えないのかというものがあります。
↓の表を見てください。
苗字 | 名前 |
---|---|
山田 | 太郎 |
山田 | たかし |
鈴木 | 太郎 |
この表は
SELECT DISTINCT 苗字,名前 FROM 名前;
でも
SELECT DISTINCT 名前,苗字 FROM 名前;
どちらでも同じ結果となります。(列の順番は変わるけどね)
苗字と名前の粒度で見ているのだから、その粒度での重複だけが省かれています。
当たり前のことなんですが、データ管理においてはとっても大切な話なんです。
粒度に意識してデータを見ていきましょう。
おわり
次回、並べ替えなどをやって問題文に入ります。
前回
Audible (オーディブル) – 本を聴くAmazonのサービス
読んでくれてありがとう!
コメント