Oracle中的分组求和技巧(oracle中分组求和)
Oracle中的分组求和技巧
在使用Oracle时,我们经常需要对数据进行汇总统计,比如根据某一列进行分组,然后对每组数据进行求和。这时候,我们可以使用Oracle中的分组求和技巧来实现。
下面就介绍几种Oracle中的分组求和技巧:
1. GROUP BY语句
GROUP BY语句可以按指定列分组,然后对所有分组内的数据进行汇总统计。可以使用SUM函数、AVG函数等对数据进行求和、平均等操作。
以员工表为例,按照部门分组,统计每个部门的人数和薪资总和:
SELECT deptno, COUNT(empno) AS cnt, SUM(sal) AS total_sal
FROM empGROUP BY deptno;
在以上语句中,deptno为分组列,COUNT(empno)可以统计每个部门的人数,SUM(sal)可以计算每个部门的薪资总和。
2. WITH ROLLUP语句
ROLLUP是一个Oracle扩展的操作符,可以通过分组对数据进行层次汇总。使用WITH ROLLUP语句时,可以按照指定列进行分组,然后按顺序对这些列进行汇总。
以员工表为例,按照部门和职位分组,统计每个部门每种职位的人数和薪资总和,并且再统计每个部门的总人数和总薪资总和:
SELECT deptno, job, COUNT(empno) AS cnt, SUM(sal) AS total_sal
FROM empGROUP BY deptno, job WITH ROLLUP;
在以上语句中,deptno和job为分组列,WITH ROLLUP可以让每个部门的各个职位数据进行汇总,并且再对所有部门的数据进行汇总。
3. GROUPING函数
GROUPING函数可以判断某一列是否作为分组列,如果是,则返回0,否则返回1。
以员工表为例,按照部门和职位分组,统计每个部门每种职位的人数和薪资总和,并且对每个部门的总记录进行统计,并且对总记录进行标号,让每组数据具有标识性:
SELECT CASE GROUPING(deptno)
WHEN 1 THEN 'All Departments' ELSE deptno
END AS deptno, CASE GROUPING(job)
WHEN 1 THEN 'All Jobs' ELSE job
END AS job, COUNT(empno) AS cnt,
SUM(sal) AS total_salFROM emp
GROUP BY ROLLUP(deptno, job);
在以上语句中,通过CASE语句和GROUPING函数让每个部门的各个职位数据进行汇总,并且对总记录进行标号,让每组数据具有标识性。
以上就是Oracle中的几种分组求和技巧,希望可以对大家有所帮助。