はじめに
コジマです。
今回はSQLで何種類かを特定したいときに使う書き方を紹介します、
サンプル
今回は某ゲームに見立てて、ユーザー名とアイテム名のテーブルから
ユーザーごとに持ってるアイテムの種類を探していこうと思います
サンプルデータ
1 2 3 4 5 6 7 8 9 10 11 |
WITH have_items AS ( SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'kojima' user_name, N'ラグナロク' item UNION ALL SELECT 'kojima' user_name, N'アダマンアーマー' item UNION ALL SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'suzuki' user_name, N'ポーション' item UNION ALL SELECT 'suzuki' user_name, N'めぐすり' item UNION ALL SELECT 'suzuki' user_name, N'めぐすり' item ) SELECT * FROM have_items; |
user_name | item |
kojima | エリクサー |
kojima | ラグナロク |
kojima | アダマンアーマー |
kojima | エリクサー |
kojima | エリクサー |
suzuki | ポーション |
suzuki | めぐすり |
suzuki | めぐすり |
kojimaはエリクサー、ラグナロク、アダマンアーマーの3種類
suzukiはポーション、めぐすりの2種類
ですね。
まず、間違えがちなサンプルを記載します。
そのあとに正しいサンプルを記載します。
間違えがちなサンプル
1 2 3 4 5 6 7 8 9 10 11 |
WITH have_items AS ( SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'kojima' user_name, N'ラグナロク' item UNION ALL SELECT 'kojima' user_name, N'アダマンアーマー' item UNION ALL SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'suzuki' user_name, N'ポーション' item UNION ALL SELECT 'suzuki' user_name, N'めぐすり' item UNION ALL SELECT 'suzuki' user_name, N'めぐすり' item ) SELECT user_name, count(item) items FROM have_items GROUP BY user_name; |
user_name | items |
kojima | 5 |
kojima | エリクサー |
suzuki | 3 |
このサンプルだとitemカラムがNULLでないレコード数が取れてしまいます。
種類を取るためには以下のようにする必要があります。
正しいサンプル
1 2 3 4 5 6 7 8 9 10 11 |
WITH have_items AS ( SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'kojima' user_name, N'ラグナロク' item UNION ALL SELECT 'kojima' user_name, N'アダマンアーマー' item UNION ALL SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'kojima' user_name, N'エリクサー' item UNION ALL SELECT 'suzuki' user_name, N'ポーション' item UNION ALL SELECT 'suzuki' user_name, N'めぐすり' item UNION ALL SELECT 'suzuki' user_name, N'めぐすり' item ) SELECT user_name, count(distinct item) items FROM have_items GROUP BY user_name; |
user_name | items |
kojima | 3 |
kojima | エリクサー |
suzuki | 2 |
DISTINCTを指定することにより、重複が排除されて何種類あるかを調べることができます。
さいごに
まとめると
count(DISTINCT column_name) という書き方で何種類かを調べることができる!
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
以上、コジマでした。