SQL 複数のグループを指定する(grouping sets)

SQLのgrouping setsのサンプルです。
(確認環境:Oracle Express Edition 11g Release 2,Microsoft SQL Server 2019)

grouping sets

grouping setsは、1つのSQLで複数のgroup byを指定できます。

次のテーブルがあるとします。

salesテーブル
id category area price
1 フルーツ East 350
2 フルーツ West 250
3 野菜 East 150
4 野菜 West 50

1.上記salesテーブルに対してcategoryをgroup byして抽出します。

select category,AVG(price) AS price1
FROM Sales
group by category

AVGは集約関数で、平均を出します。
結果は以下です。

category price
フルーツ 300
野菜 100

2.また同じく上記salesテーブルに対してareaをgroup byして抽出します。

select area,AVG(price) AS price1
FROM Sales
group by area

areaごとにグルーピングしています。結果は以下です。

area price
East 250
West 150

grouping sets

上記は2つのSQLを使用しましたが、grouping setsを使用すれば1つのSQLで結果を抽出できます。
以下は、grouping setsを使用した例です。

SELECT category,area,AVG(price) AS price1
FROM Sales
group by 
grouping sets(
(category),
(area)
)

4行目は、grouping setsです。5行目にcategory,6行目にareaがあります。

結果は以下です。

category area price
フルーツ   300
野菜   100
  East 250
  West 150

categoryごとのグルーピングの結果とareaごとのグルーピングの結果がまとめて表示されます。
それぞれのグルーピングで使用していない項目はnullになります。

関連の記事

SQL 複数の行をまとめる(集約関数/group by/having)

△上に戻る