Oracle PL/SQL之GROUP BY ROLLUP

ROLLUP字面意思大概就是向上卷,用在GROUP BY 里面可起到累积求和的作用:

没有ROLLUP的情况下,以下查询按department_id和job_id进行分组求和:

SELECT department_id, job_id, SUM(salary) FROM employees WHERE department_id < 60 GROUP BY department_id, job_id;

Output:

DEPARTMENT_ID,JOB_ID,SUM(SALARY) 50,ST_CLERK,55700 50,ST_MAN,36400 30,PU_CLERK,13900 50,SH_CLERK,64300 20,MK_MAN,13000 30,PU_MAN,11000 10,AD_ASST,4400 20,MK_REP,6000 40,HR_REP,6500

有ROLLUP的情况下:

先对department_id和job_id进行分组求和,再根据department_id累计求和,最后计算总和:

SELECT department_id, job_id, SUM(salary) FROM employees WHERE department_id < 60 GROUP BY ROLLUP(department_id, job_id);

Output:

DEPARTMENT_ID,JOB_ID,SUM(SALARY) 10,AD_ASST,4400 10,,4400 20,MK_MAN,13000 20,MK_REP,6000 20,,19000 30,PU_MAN,11000 30,PU_CLERK,13900 30,,24900 40,HR_REP,6500 40,,6500 50,ST_MAN,36400 50,SH_CLERK,64300 50,ST_CLERK,55700 50,,156400 ,,211200

先对department_id和job_id进行分组求和,再根据job_id累计求和,最后计算总和:

SELECT department_id, job_id, SUM (salary) FROM employees WHERE department_id < 60 GROUP BY ROLLUP (job_id, department_id);

Output:

DEPARTMENT_ID,JOB_ID,SUM(SALARY) 40,HR_REP,6500 ,HR_REP,6500 20,MK_MAN,13000 ,MK_MAN,13000 20,MK_REP,6000 ,MK_REP,6000 30,PU_MAN,11000 ,PU_MAN,11000 50,ST_MAN,36400 ,ST_MAN,36400 10,AD_ASST,4400 ,AD_ASST,4400 30,PU_CLERK,13900 ,PU_CLERK,13900 50,SH_CLERK,64300 ,SH_CLERK,64300 50,ST_CLERK,55700 ,ST_CLERK,55700 ,,211200

Ref:http://blog.youkuaiyun.com/zhaozhongju/archive/2009/05/13/4177358.aspx

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值