技術情報ブログ
Azure
2021.08.06

【初学者向け】Azure SQL Databaseで複数条件のカウントをCASE式で算出する方法

【初学者向け】Azure SQL Databaseで複数条件のカウントをCASE式で算出する方法

こんにちは。アーティサン株式会社の池内です。

 

本記事では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
13

ここまではシンプルな 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 果物

実行結果

 Result1Result2
132

上記 SQL 文のように、CountではなくSumを使用することで、主題を達成できます。

Countを使わない理由は、Count の中身にサブクエリを入力できない制約があるためです。

 

あとがき

本記事では、 複数条件のカウントをCASE式で算出する方法を紹介しました。

この記述は Oracle や MySQL を始め、SQLを使用する他のデータベースに流用できます。

( MySQL では Count 文に直接条件を書き込めるため、馴染みのない記述方法だったかもしれません)

今回は、他の SQL ではもっと簡単に記述できる内容について執筆しましたが、勿論 Azure SQL Database にも、SQLを使用する他のデータベースにはない関数や機能が使えるメリットが存在します。

次回は、Azure SQL Database 特有の関数について、記事を作成する予定です。

最後までお読みいただき、ありがとうございました。

Azure SQL DatabaseやPower AppsとSharePointなどの開発担当:池内佑哉

池内佑哉

IT2年生です。趣味は紅茶です。

シェアする
記事カテゴリ
最新記事
2024.04.03

非エンジニア【(元)自治体職員】が半年間ローコード開発をしてみたら

2024.03.27

Power Automateのベストプラクティス・アンチパターン(5)【Apply to each×コンカレンシー×変数の設定はNG】

2024.03.20

Power Apps×Teams:Teams上からPower Appsを実行する方法

2024.03.13

Power Apps:SharePointリストと連携したカレンダーアプリを自作してみよう

2024.03.06

SharePointのあったらいいなを集めました(X-SPのご紹介)

モデル駆動型アプリPower AppsPower PlatformSharePointExcelPower AutomateC#attributevalidationローコードAngularAccessInfoPathMatTableAngular Materialデータ構造SortByColumns関数TypeScriptHTMLEF CoreマイグレーションFramework CoreAttribute directivesO/Rマッパーazure sql databaseCase式HTTP RequestCSSxUnit.Net Core 3.1VSCode.Net Core Test ExplorerDataverse for Teamsitem関数Google MapsMarker ClustererRANK()関数Dynamics 365 SalesMicrosoft TranslatorマーカークラスタリングライブラリtailwindcssマルチテナントドロップダウンメニューBreakpointObserverメディアクエリスマホPCレスポンシブ入門初心者中級者キャンバスアプリDatePickerDropdownviewビューアクセス制限承認リマインドSetForAllUpdateContextロードマップ技術It情報技術メッセージIDメールfirst()関数nest入れ子動的リストcollectionコレクション複数の添付ファイル承認フローformエクスポートインポートカスタマイズcomponentダイアログコンポーネントdialogTips新機能変数検索Microsoft 365グループセキュリティグループ送信元メールの送信差出人インスタントクラウドフロー自動化したクラウドフロー委任VBAエラーエクセルerror復元restorePower BI個人列ユーザー列SharePoint Onlineリスト非表示アプリ[市民開発者構築自動化したクラウド フローフローの種類インスタント クラウド フロースケジュール済みクラウド フローレスポンシブ レイアウトresponsive layoutデータ行の制限引き継ぎ退職所有者を変更異動LoopMicrosoftdesignJSONデザインtemplateテンプレート運用選択肢列参照列ChatGPTOpenAIオープンAIチャットGPTgalleryギャラリースクロールコンテナショートカットキーshortcut keyconcat関数文字制限フロー実行開発環境環境本番環境ライセンス環境構築手順pipelineCI/CDパイプラインDevOpsMicrosoft 365簡易在庫管理時間外通知ファイルフィルター クエリドキュメント ライブラリfilter querysortソートmultiple item複数項目シェアポイント便利機能カレンダーCalendarTeamsローコード開発非エンジニア体験談
PageTop
ページトップに戻る