oracle 如何汇总所有下级数据
时间: 2023-08-11 20:23:23 浏览: 45
在Oracle中,可以使用递归查询(Recursive Query)的方式来汇总所有下级数据。假设我们有一个表结构如下:
```
CREATE TABLE t_dept (
dept_id NUMBER(10) PRIMARY KEY,
dept_name VARCHAR2(50) NOT NULL,
parent_id NUMBER(10)
);
```
其中,parent_id表示上级部门的dept_id,如果该部门为最上级部门,则parent_id为null。
现在,我们要汇总所有下级部门的人数,可以使用以下SQL语句:
```
WITH dept_tree(dept_id, dept_name, parent_id, level) AS (
SELECT dept_id, dept_name, parent_id, 1
FROM t_dept
WHERE parent_id IS NULL
UNION ALL
SELECT d.dept_id, d.dept_name, d.parent_id, dt.level + 1
FROM t_dept d
JOIN dept_tree dt ON d.parent_id = dt.dept_id
)
SELECT dept_id, dept_name, SUM(num) AS total_num
FROM (
SELECT dt.dept_id, dt.dept_name, COUNT(*) AS num
FROM t_dept d
JOIN dept_tree dt ON d.dept_id = dt.dept_id
GROUP BY dt.dept_id, dt.dept_name
)
GROUP BY dept_id, dept_name;
```
上面的SQL语句使用了递归查询(Recursive Query)的方式,其中,WITH子句定义了一个名为dept_tree的递归查询。首先查询出最上级部门,然后递归查询下级部门,直到查询出所有部门。最后,使用一个子查询来统计每个部门的人数,再使用GROUP BY来汇总每个部门的下级部门人数之和。
需要注意的是,递归查询可能会导致性能问题,因此,在实际使用中需要根据具体情况进行优化。