爱易网页
数据库教程
聊GROUP BY 中的ROLLUP函数
日期:2014-05-16 浏览次数:20489 次
谈GROUP BY 中的ROLLUP函数
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等功能
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。