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)

クエリは、期待どおりにすべてのグルーピング セットの集約を持つ単一の結果を生成しました。

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

コメントを残す

メールアドレスが公開されることはありません。