Sql 具有分层查询的分组函数

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; 但这并不能像我希望的那样检索工资总额。首先建立层

我有下表中的员工(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;

但这并不能像我希望的那样检索工资总额。

首先建立层次结构,记住根,然后按根分组。例如,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