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
を使用して、クエリで複数のグループ化セットを生成する方法を学びました。