前回
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)
これにより総計の行は出力されない。