はじめに
コジマです。
今回はSQLで何種類かを特定したいときに使う書き方を紹介します、
サンプル
今回は某ゲームに見立てて、ユーザー名とアイテム名のテーブルから
ユーザーごとに持ってるアイテムの種類を探していこうと思います
サンプルデータ
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種類
ですね。
まず、間違えがちなサンプルを記載します。
そのあとに正しいサンプルを記載します。
間違えがちなサンプル
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でないレコード数が取れてしまいます。
種類を取るためには以下のようにする必要があります。
正しいサンプル
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を指定することにより、重複が排除されて何種類あるかを調べることができます。
さいごに
まとめると
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
もっと学びたい人はこちら
SQLをもっと学びたいエンジニアのためにおすすめのUdemy講座を紹介いたします!
SQLはじめましての人!まずあなたの3時間をください。
この講座でまずこれだけは覚えてくれ!という内容をしっかり押さえることができます。
SQLはプログラミング言語がなんであれ、システム開発に必要になります。
この講座を見て最低限必要な知識を身に着けて実践で貢献できるようになりましょう!
3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL
データベースの設計について学べる講座です。
設計について学べる教材は少ないので、実務でデータベースを触る人にはとてもうれしい講座です。
データベース講座1:データベース論理設計
ちょっとニッチに感じるかもしれませんが、SQLのインデックスを学ぶことができる講座です。
よい性能でSQLを運用するためにはインデックスの理解は必要不可欠です。
CRUD書いて満足するエンジニアを出し抜きましょう。
SQLServerのインデックスを理解して検索を速くする方法
気になった人はぜひ見てみてくださいね!
以上、コジマでした。