SQL Server GROUPING SETS
概要:このチュートリアルでは、SQL Server GROUPING SETSを使って複数のグルーピングセットを生成する方法を学びます。
Setup a sales summary table
デモ用にsales.sales_summaryという新しいテーブルを作ってみよう。
Code language: SQL (Structured Query Language) (sql)
このクエリでは、ブランドとカテゴリー別の売上金額データを取得し、sales.sales_summaryテーブルに入力します。
Code language: SQL (Structured Query Language) (sql)

Getting started with SQL Server GROUPING SETS
定義では、グループ化セットとはグループ化のための列のグループのことを指します。 通常、集約を含む1つのクエリで1つのグループ化セットを定義します。
たとえば、次のクエリはブランドとカテゴリーを含むグループ化セットを定義し、(brand, category)と表示されます。 8263>
Code language: SQL (Structured Query Language) (sql)

次のクエリは、ブランド別の売上高を返します。 これは、グループ化セット (brand):
Code language: SQL (Structured Query Language) (sql)

次のクエリは、カテゴリ別の売上高を返します。 グループ化セット (category):
Code language: SQL (Structured Query Language) (sql)

次のクエリは、空のグループ化セット () を定義しています。
Code language: SQL (Structured Query Language) (sql)

上記の 4 つのクエリは、4 つのグループ化セットで 4 つの結果セットを返します。
Code language: SQL (Structured Query Language) (sql)
すべてのグループ化セットのデータを集約した統一結果セットを取得するには、UNION ALL 演算子を使用できます。
UNION ALL 演算子はすべての結果セットに同じ数の列を必要とするため、次のようにクエリの選択リストに NULL を追加する必要があります:
Code language: SQL (Structured Query Language) (sql)

クエリは、期待どおりにすべてのグルーピング セットの集約を持つ単一の結果を生成しました。
- このクエリはかなり長いです。
- このクエリは、SQL Server が 4 つのサブクエリを実行し、結果セットを 1 つに結合する必要があるため、時間がかかります。
これらの問題を解決するために、SQL Server は GROUPING SETS という GROUP BY 節のサブ条項を提供します。
は、同じクエリの中で複数のグループ化セットを定義します。 以下は、GROUPING SETS の一般的な構文です。
Code language: SQL (Structured Query Language) (sql)
このクエリでは、4 つのグループ化セットを作成します。 しかし、このクエリはより読みやすく、もちろん効率的です。
GROUPING関数
GROUPING関数は、GROUP BY句で指定した列が集約されているかどうかを示します。
Code language: SQL (Structured Query Language) (sql)

grouping_brand列の値は、行が集約されているかどうかを示し、1は売上金額がブランド別に集約されていることを意味し、0は売上金額がブランド別に集約されていないことを意味します。 同じコンセプトがgrouping_category列にも適用されます。
このチュートリアルでは、SQL Server GROUPING SETSを使用して、クエリで複数のグループ化セットを生成する方法を学びました。




