【问题标题】:Group functions with Hierarchical Query使用分层查询对函数进行分组
【发布时间】:2016-09-16 07:03:59
【问题描述】:

我有下表雇员(emp_id, name,salary, manager_id) 我想编写查询来检索 manager_id 以及由该经理管理的员工的所有薪水的总和,甚至是由该经理管理的经理管理的员工的总和。 我这样写查询:

Select manager_id , sum(salary) 
from employees 
connect by prior emp_id = manager_id
  start manager_id = 100 
group by manager_id;

但这并不能如我所愿地检索总工资。

【问题讨论】:

  • 你使用什么数据库?
  • connect by prior 指向oracle

标签: sql oracle


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    @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 level<>1

    测试数据:

    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
    

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 1970-01-01
      • 2013-02-27
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多