SQLのgrouping setsのサンプルです。
(確認環境:Oracle Express Edition 11g Release 2,Microsoft SQL Server 2019)
grouping sets
grouping setsは、1つのSQLで複数のgroup byを指定できます。
次のテーブルがあるとします。
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になります。
関連の記事