Oracle PL/SQL之GROUP BY ROLLUP

本文详细介绍了SQL中ROLLUP字面意思及其在GROUP BY语句中的应用,包括其如何进行分组求和及向上汇总的过程。通过具体示例展示了在不同分组条件下的输出结果,帮助理解其在数据分析和报表生成中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


原文链接: http://blog.youkuaiyun.com/t0nsha/article/details/6538774

转载于:https://my.oschina.net/dtec/blog/46828

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值