こんにちは。アーティサン株式会社の池内です。
本記事ではSQL初学者に向け、Azure SQL Databaseで「複数条件のカウントをCASE式で算出する方法」をご紹介します。
この方法を使うことで、合計値(例:日本在住の顧客数と日本在住かつ購入額が1万円以上の顧客数を1つのビューで表示させる)の一覧を簡単に算出することができます。
まずは本題へ入る前に、数あるデータベースの中で、何故Azure SQL Databaseを使用するか簡単に説明します。
Azure SQL Databaseを利用するメリット
Azure SQL Databaseとは、Microsoft社が提供するクラウド上で構築されている関係データベースシステム(RDBMS【Relational DataBase Management System】)です。
特徴
- Azure AD を利用した認証及びアクセス権限の設定が可能
- マネージド データベースである
Office アプリのために導入されることが多い Microsoft 365 には、フリー版の Azure AD サブスクリプションが付属しています。
ここに Azure SQL Database の権限を紐づけることができます。
これにより、共有のアカウントが不要となるメリットが生まれます。
また、バージョンアップやセキュリティの更新等のサーバー管理を Microsoft が行います。
ユーザーは データベースを使用したシステム開発に集中できます。
以上が Azure SQL Database を使用するメリットです。
本記事は、これから Azure SQL Database を使っていく方へ向けた内容となります。
ちなみに、Microsoft にはSQL Serverと呼ばれる製品があります。これはAzure SQL Database の元となったサービスで、こちらはオンプレミス版です。本記事の内容は、両方のサービスで適用できます。
単一条件のカウント方法
それでは、本題に移ります。
今回ご紹介する「複数条件のカウントをCASE式で算出する方法」を Azure SQL Database で実現するためには、少し工夫が必要です。
説明のため、まずは「日本在住の顧客数をカウントする」ケースについて考えます。
準備として、[顧客]という名前のテーブルを作成します。(下記参照)
名前 | 国名 | 購入額 |
---|---|---|
鈴木 | アメリカ | 15,000 |
加藤 | 日本 | 5,000 |
田中 | 日本 | 12,000 |
飯田 | アメリカ | 6,000 |
佐藤 | 日本 | 20,000 |
「日本在住の顧客数をカウントする」ためには、このテーブルの[国名]が”日本”であるという条件で絞り込みを行い、その後カウントを行えば達成できます。
SELECT Count(*) AS Result
FROM 顧客
WHERE 国名 = N’日本’
実行結果
Result | |
---|---|
1 | 3 |
ここまではシンプルな SQL 文の記述です。
複数条件のカウント方法
続いて、「日本在住の顧客数」に加え、新たに「日本在住かつ購入額が1万円以上の顧客数」を表示する場合について考えます。
異なる条件を同時に当てはめる場合、 WHERE 文に条件を記述する方法は使えません。
それでは、カウント毎に直接条件文を書き込めばいいじゃないか、と思いますが……
この方法、Azure SQL Database では使えません。それでは、どのように記述すれば複数条件のカウントを算出できるでしょうか。
ここで、タイトルに出てきた CASE 式を利用します。 複数条件のカウントをCASE式で算出するには、以下の SQL 文を発行します。
SELECT
Sum(CASE WHEN 国名 = N'日本' THEN 1 ELSE 0 END) AS Result1,
Sum(CASE WHEN 国名 = N'日本' AND 購入額 >= 10000 THEN 1 ELSE 0 END) AS Result2
FROM 果物
実行結果
Result1 | Result2 | |
---|---|---|
1 | 3 | 2 |
上記 SQL 文のように、CountではなくSumを使用することで、主題を達成できます。
Countを使わない理由は、Count の中身にサブクエリを入力できない制約があるためです。
あとがき
本記事では、 複数条件のカウントをCASE式で算出する方法を紹介しました。
この記述は Oracle や MySQL を始め、SQLを使用する他のデータベースに流用できます。
( MySQL では Count 文に直接条件を書き込めるため、馴染みのない記述方法だったかもしれません)
今回は、他の SQL ではもっと簡単に記述できる内容について執筆しましたが、勿論 Azure SQL Database にも、SQLを使用する他のデータベースにはない関数や機能が使えるメリットが存在します。
次回は、Azure SQL Database 特有の関数について、記事を作成する予定です。
最後までお読みいただき、ありがとうございました。
池内佑哉
IT2年生です。趣味は紅茶です。