技術情報ブログ
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などの開発担当:池内佑哉

池内佑哉

大手部品製造会社に新卒で入社したものの、部内でどんどん人が辞めていく流れに危機感を感じわずか2年でIT未経験のままアーティサンへ。
IT業界の荒波に溺れかけながらもなんとかしがみつき、気が付けば人に指示を出す側に回っていました。
趣味は殺陣にミュージカル、歌に作曲、謎解きにボードゲーム、紅茶とコーヒーとワインなど……とにかく色々なことに手を出しては、ちょこちょこアウトプット(舞台への出演や曲やボードゲームの製作など)を出しています(職業病?)
たまにはゆっくり温泉旅行にでも行きたい……♨

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

Power Apps, Power Automate で作る NFC タグを活用したアプリ例

2025.04.16

Power Apps で NFC タグを使ってみる

2025.04.02

Copilot Studioで作成したコパイロットをTeams に追加する方法

2025.03.19

SharePoint リストで主キーを実装し、比較してみた

2025.03.12

SharePointのデザインをもっとおしゃれに!(X-SP Design | SharePoint デザイン拡張サービスのご紹介)(4) サンプルの紹介その2

AccessCSSBreakpointObserverSet承認フローメールの送信非表示Microsoftshortcut key通知体験談JavaScriptSharePoint Framework転職InfoPathxUnitメディアクエリForAllform差出人アプリdesignconcat関数ファイル勉強表示SPFx主キーMatTable.Net Core 3.1スマホUpdateContextエクスポートインスタントクラウドフロー[市民開発者JSON文字制限フィルター クエリ内製化切替サンプルCopilot StudioAngular MaterialVSCodePCロードマップインポート自動化したクラウドフロー構築デザインフロー実行ドキュメント ライブラリ市民開発登録者samplePowerAppsデータ構造.Net Core Test Explorerレスポンシブ技術カスタマイズ委任自動化したクラウド フロー運用開発環境filter query管理システム列X-SPNFCタグモデル駆動型アプリSortByColumns関数Dataverse for Teams入門ItcomponentVBAフローの種類選択肢列環境sortガバナンス登録日StylePowerAutomatePower AppsTypeScriptitem関数初心者情報技術ダイアログエラーインスタント クラウド フロー参照列本番環境ソートerror notification更新者StudioPower PlatformHTMLGoogle Maps中級者メッセージIDコンポーネントエクセルスケジュール済みクラウド フローChatGPTライセンスmultiple itemエラー通知更新日AISharePointEF CoreMarker Clustererキャンバスアプリメールdialogerrorレスポンシブ レイアウトOpenAI環境構築手順複数項目削除変更生成系AIExcelマイグレーションRANK()関数DatePickerfirst()関数Tips復元responsive layoutオープンAIpipelineシェアポイントフォルダ外部DBCopilotPower AutomateFramework CoreDynamics 365 SalesDropdownnest新機能restoreデータ行の制限チャットGPTCI/CD便利機能ゴミ箱連携licenseC#Attribute directivesMicrosoft Translatorview入れ子変数Power BI引き継ぎgalleryパイプラインカレンダー完全削除接続添付ファイルコントロールattributeO/Rマッパーマーカークラスタリングライブラリビュー動的リスト検索個人列退職ギャラリーDevOpsCalendarモデル駆動型データフローファイルサイズvalidationazure sql databasetailwindcssアクセス制限collectionMicrosoft 365グループユーザー列所有者を変更スクロールMicrosoft 365Teamsセキュリティロールrecycle binフルリモートワークローコードCase式マルチテナント承認コレクションセキュリティグループSharePoint Online異動コンテナ簡易在庫管理ローコード開発ビジネスルールごみ箱アーティサンAngularHTTP Requestドロップダウンメニューリマインド複数の添付ファイル送信元リストLoopショートカットキー時間外非エンジニアDataverseアクセス許可Artisan
PageTop
ページトップに戻る