Sql 具有分层查询的分组函数
我有下表中的员工(emp_id、姓名、工资、经理id) 我想编写一个查询来检索经理id和由该经理管理的员工的所有工资总和,甚至是由该经理管理的经理管理的所有工资总和。 我这样写查询:Sql 具有分层查询的分组函数,sql,oracle,Sql,Oracle,我有下表中的员工(emp_id、姓名、工资、经理id) 我想编写一个查询来检索经理id和由该经理管理的员工的所有工资总和,甚至是由该经理管理的经理管理的所有工资总和。 我这样写查询: Select manager_id , sum(salary) from employees connect by prior emp_id = manager_id start manager_id = 100 group by manager_id; 但这并不能像我希望的那样检索工资总额。首先建立层
Select manager_id , sum(salary)
from employees
connect by prior emp_id = manager_id
start manager_id = 100
group by manager_id;
但这并不能像我希望的那样检索工资总额。首先建立层次结构,记住根,然后按根分组。例如,emp_id=100的经理和他/她管理的所有员工的工资:
SELECT manager_id, SUM(salary) "Total_Salary"
FROM (
SELECT CONNECT_BY_ROOT emp_id as manager_id, Salary
FROM emploees
START WITH emp_id=100
CONNECT BY PRIOR emp_id = manager_id )
GROUP BY manager_id
ORDER BY manager_id;
首先建立层次结构,记住根,然后按根分组。例如,emp_id=100的经理和他/她管理的所有员工的工资:
SELECT manager_id, SUM(salary) "Total_Salary"
FROM (
SELECT CONNECT_BY_ROOT emp_id as manager_id, Salary
FROM emploees
START WITH emp_id=100
CONNECT BY PRIOR emp_id = manager_id )
GROUP BY manager_id
ORDER BY manager_id;
@Serg的解决方案很好,但对于一个管理者来说,更简单的查询也可以:
select 21 as id, sum(salary) as summed
from employees e
start with emp_id = 21
connect by prior emp_id = manager_id;
如果您不想要经理的工资总额,请添加where level1
测试数据:
create table employees(emp_id number(4), name varchar2(10),
salary number(6), manager_id number(4));
insert into employees values ( 1, 'King', 10000, null);
insert into employees values ( 11, 'Smith', 8000, 1);
insert into employees values ( 21, 'Jones', 9000, 1);
insert into employees values ( 211, 'Brown', 7500, 21);
insert into employees values ( 212, 'Adams', 6200, 21);
insert into employees values (2111, 'White', 5000, 211);
输出:
ID SUMMED
------ ----------
21 27700
@Serg的解决方案很好,但对于一个管理者来说,更简单的查询也可以:
select 21 as id, sum(salary) as summed
from employees e
start with emp_id = 21
connect by prior emp_id = manager_id;
如果您不想要经理的工资总额,请添加where level1
测试数据:
create table employees(emp_id number(4), name varchar2(10),
salary number(6), manager_id number(4));
insert into employees values ( 1, 'King', 10000, null);
insert into employees values ( 11, 'Smith', 8000, 1);
insert into employees values ( 21, 'Jones', 9000, 1);
insert into employees values ( 211, 'Brown', 7500, 21);
insert into employees values ( 212, 'Adams', 6200, 21);
insert into employees values (2111, 'White', 5000, 211);
输出:
ID SUMMED
------ ----------
21 27700
您使用什么数据库?
connectbyprior
表示您使用什么数据库?connectbyprior
表示oracle