【SQL】何種類かを知りたいときの書き方【SQL Server】

【SQL】何種類かを知りたいときの書き方【SQL Server】

はじめに

コジマです。

今回は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を指定することにより、重複が排除されて何種類あるかを調べることができます。

さいごに

まとめると

count(DISTINCT column_name) という書き方で何種類かを調べることができる!

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

もっと学びたい人はこちら

SQLをもっと学びたいエンジニアのためにおすすめのUdemy講座を紹介いたします!

SQLはじめましての人!まずあなたの3時間をください。
この講座でまずこれだけは覚えてくれ!という内容をしっかり押さえることができます。
SQLはプログラミング言語がなんであれ、システム開発に必要になります。
この講座を見て最低限必要な知識を身に着けて実践で貢献できるようになりましょう!
3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL

データベースの設計について学べる講座です。
設計について学べる教材は少ないので、実務でデータベースを触る人にはとてもうれしい講座です。

ちょっとニッチに感じるかもしれませんが、SQLのインデックスを学ぶことができる講座です。
よい性能でSQLを運用するためにはインデックスの理解は必要不可欠です。
CRUD書いて満足するエンジニアを出し抜きましょう。

気になった人はぜひ見てみてくださいね!

以上、コジマでした。


SQLカテゴリの最新記事