RollUp集計(複数列)

RollUp集計で小計と総計も取得

HanbaiDay,SyouhinCodeごとのデータ件数とSuuryouの合計を求めてみます。

小計として、HanbaiDayごとの集計結果を取得し、総計として、全体行を対象とした集計結果も取得します。

select HanbaiDay,SyouhinCode,
count(*) as cnt,sum(Suuryou) as SumSuuryou
  from LogTable
group by RollUp(HanbaiDay,SyouhinCode)
order by HanbaiDay,SyouhinCode;
出力結果
HanbaiDay   SyouhinCode  cnt  SumSuuryou
----------  -----------  ---  ----------
2011-06-30  AAA            3           9
2011-06-30  BBB            2          40
2011-06-30  CCC            2         716
2011-06-30  null           7         765
2011-07-01  BBB            2         400
2011-07-01  CCC            1         500
2011-07-01  null           3         900
2011-07-02  AAA            2           9
2011-07-02  null           2           9
null        null          12        1674

group by句でgroup by RollUp(HanbaiDay,SyouhinCode) と指定することによって、HanbaiDay,SyouhinCodeごとの集計結果と、HanbaiDayごとの集計結果(小計)と、全体行を対象とした集計結果(総計)を、1つのselect文で取得しています。

RollUp集計(複合列)

複合列でRollUp

HanbaiDay,SyouhinCodeごとのデータ件数とSuuryouの合計を求めてみます。

総計として、全体行を対象とした集計結果も取得します。

select HanbaiDay,SyouhinCode,
count(*) as cnt,sum(Suuryou) as SumSuuryou
  from LogTable
group by RollUp((HanbaiDay,SyouhinCode))
order by HanbaiDay,SyouhinCode;
出力結果
HanbaiDay   SyouhinCode  cnt  SumSuuryou
----------  -----------  ---  ----------
2011-06-30  AAA            3           9
2011-06-30  BBB            2          40
2011-06-30  CCC            2         716
2011-07-01  BBB            2         400
2011-07-01  CCC            1         500
2011-07-02  AAA            2           9
null        null          12        1674

group by句でgroup by RollUp((HanbaiDay,SyouhinCode)) と指定することによって、HanbaiDay,SyouhinCodeごとの集計結果と、全体行を対象とした集計結果(総計)を、1つのselect文で取得しています。

group by RollUp((HanbaiDay,SyouhinCode))のように、RollUpの列指定の括弧内で、複数列をカンマ区切りで記述し、RollUpの単位を複数列がまとまった単位にできます。(複合列と呼ばれます)