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 emp
GROUP 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 emp
GROUP 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_sal
FROM emp
GROUP BY ROLLUP(deptno, job);

在以上语句中,通过CASE语句和GROUPING函数让每个部门的各个职位数据进行汇总,并且对总记录进行标号,让每组数据具有标识性。

以上就是Oracle中的几种分组求和技巧,希望可以对大家有所帮助。


数据运维技术 » Oracle中的分组求和技巧(oracle中分组求和)