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)
山田太郎351,000
鈴木花子201,500
竹下次郎302,500
佐藤梅子40800
ジュン鎌田23800
田中誠二202,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;
SQLServer 年齢ごとの時給計を求め、併せて集計行かどうかの判別も行うサンプル実行結果