SQL道場 集計関数 GROUPING関数
SQLで集計行かどうか判定するGROUPING関数について記載しています。
対応データベース:SQLServer Oracle DB2
GROUPING関数の文法
SELECT GROUPING(列名) FROM 表名 GROUP BY ROLLUP | CUBE(列名)
SELECT GROUPING(列名) FROM 表名 GROUP BY 列名 WITH ROLLUP | CUBE
引数 Arguments | 列名 Column name | 行数を数える列 column counting rows |
返値 return value | [数値型] 行数 Number of rows |
ROLLUP
小計行。ROLLUPを指定した場合は、選択した列の値の階層の集計を示す結果セットが生成されます。
CUBE
クロス集計。CUBEを指定した場合は、選択した列の値のすべての組み合わせの集計を示す結果セットが生成されます。
GROUPING関数はROLLUPまたはCUBEによって追加された集計行かどうか判定を行います。集計行ではない場合は0が、集計行の場合は1が返されます。
実行例
社員テーブル
社員名(EMP_NAME) | 年齢(EMP_AGE) | 性別(EMP_SEX) | 時給(EMP_SALARY) |
---|---|---|---|
山田太郎 | 35 | 男 | 1,000 |
鈴木花子 | 20 | 女 | 1,500 |
竹下次郎 | 30 | 男 | 2,500 |
佐藤梅子 | 40 | 女 | 800 |
ジュン鎌田 | 23 | 男 | 800 |
田中誠二 | 20 | 男 | 2,500 |
SQLServerの実行例
年齢ごとに集計(合計)し、最後に総合計が追加されます。集計行(総合計)は、GROUPING(EMP_AGE)で指定したカラムに0か1でセットされ判定することができます。
/* SQLServer 年齢ごとの時給計を求め、併せて集計行かどうかの判別も行うサンプル */
SELECT EMP_AGE,SUM(EMP_SALARY),GROUPING(EMP_AGE) FROM [testdb].[dbo].[MST_EMPLOYEE] GROUP BY EMP_AGE WITH ROLLUP;