前回
16. GROUPING演算子
16.2 ROLLUPの使い方
-- ROLLUP SELECT A.a, A.b, sum(A.c) AS SUM FROM ABS AS A GROUP BY ROLLUP(A.b) -- MySQLではGROUP BY A.b WITH ROLLUP
これは①および②を一度に行っているのに等しい。①を超集合行という。
16.3 GROUPING関数
では集約行がであることに起因すると超集合行に起因するとが混同される。これを類別するのに関数を用いる。この関数は引数に取った列の値が超集合列のために生じたの場合にはを、それ以外の値にはを返す。そこに更に文を使えば任意の文字列を充てることができる。
SELECT CASE WHEN GROUPING(A.a) = 1 THEN 'a 集計値' ELSE A.a END AS Species CASE WHEN GROUPING(A.b) = 1 THEN '集計値' ELSE CAST(A.b AS VARCHAR(16)) END AS b -- CASE文の出力データ型を一致させるためにCASTする SUM(A.c) AS SUM FROM ABC as A GROUP BY ROLLUP(A.a, A.b)
16.4 CUBE
句に与えられた集約キーのすべての可能な組み合わせを1つにまとめるのにを用いる。
SELECT CASE WHEN GROUPING(A.a) = 1 THEN 'a 集計値' ELSE A.a END AS Species CASE WHEN GROUPING(A.b) = 1 THEN '集計値' ELSE CAST(A.b AS VARCHAR(16)) END AS b -- CASE文の出力データ型を一致させるためにCASTする SUM(A.c) AS SUM FROM ABC as A GROUP BY CUBE(A.a, A.b)
16.5 GROUPING SETS
およびで得られた結果の一部のレコードのみが欲しい場合には を用いる。
SELECT CASE WHEN GROUPING(A.a) = 1 THEN 'a 集計値' ELSE A.a END AS Species CASE WHEN GROUPING(A.b) = 1 THEN '集計値' ELSE CAST(A.b AS VARCHAR(16)) END AS b -- CASE文の出力データ型を一致させるためにCASTする SUM(A.c) AS SUM FROM ABC as A GROUP BY GROUPING SETS (A.a, A.b)
これにより総計の行は出力されない。