rollup(a,b)的特点是,先安(a,b)一起汇总统计,然后再按照A进行汇总统计,最后是对所有的统计再统计。
ROLLUP中的参数可以多个,形式也多样,例如包含在()内的参数如果有多个,但是又想对某些进行列绑定按照一个列处理,
则可以嵌套()。下例中的第二就是如此:
例1:
select a.khh,b.jjrxm,a.cjrq, sum(a.cjje) total from tjgmxls a,tkhxx b
where b.jjrbh(+)=a.khh and cjrq<20070201
group by rollup(khh,jjrxm,cjrq);
例2:
select a.khh,b.jjrxm,a.cjrq, sum(a.cjje) total from tjgmxls a,tkhxx b
where b.jjrbh(+)=a.khh and cjrq<20070201
group by rollup((khh,jjrxm),cjrq);
例3:
有表格数据如下,
SQL> select * from test_Value;
MONS JJR CJL CJJE
---------- ---------- ---------- ----------
200801 LZF 100 1000
200802 LZF 200 2000
200803 LZF 300 1000
200801 wth 300 1000
200802 wth 100 500
200803 wth 1000 4000
6 rows selected
在其上做一些比较复杂的查询
-------
SQL> select decode(jjr,null,'汇总',jjr),
2 sum(cjl) ttl_cjl, sum(cjje), avg(cjl), sum(cjl) / sum(cjje)
3 from test_value
4 group by rollup(jjr)
5 order by ttl_cjl
6 /
DECODE(JJR,NULL,'汇总',JJR) TTL_CJL SUM(CJJE) AVG(CJL) SUM(CJL)/SUM(CJJE)
--------------------------- ---------- ---------- ---------- ------------------
LZF 600 4000 200 0.15
wth 1400 5500 466.666666 0.254545454545455
汇总 2000 9500 333.333333 0.210526315789474
这是比较集成的查询使用到统计,rollup,decode,order等功能
谈GROUP BY 中的ROLLUP函数
猜你喜欢
转载自t240178168.iteye.com/blog/1937131
今日推荐
周排行