【问题标题】:How to amalgamate aggregate function results, based on duplicate row values | SQL Oracle如何根据重复的行值合并聚合函数结果 | SQL 甲骨文
【发布时间】:2021-04-16 16:13:24
【问题描述】:

我正在尝试找出员工在 12 月份在每个项目上工作的小时数...

使用 Oracle DBMS。

到目前为止,我有以下...

SELECT c.clock_id, p.project_name, e.employee_first_name, e.employee_last_name, 
(clock_out - clock_in) * 24 AS hrs_worked_dec 
    FROM clock c
    LEFT JOIN employee e 
    ON c.employee_id = e.employee_id 
    LEFT JOIN project p
    ON p.project_id = c.project_id
    WHERE clock_in LIKE '%DEC%';

目前,这是根据 clock_in 和 clock_out 列的计算列出我时钟表中的所有小时。

但是,我希望合并这些结果,以便它们显示每个项目的每个员工的总和,以提供更清晰的结果。

感谢有关如何合并结果的任何帮助或指导 :-)

【问题讨论】:

    标签: sql oracle merge sum aggregate-functions


    【解决方案1】:

    您只需要GROUP BY 子句和SUM() 聚合

    SELECT p.project_name, e.employee_id, e.employee_first_name, e.employee_last_name, 
           SUM((clock_out - clock_in) * 24) AS hrs_worked_dec 
      FROM clock c
      LEFT JOIN employee e 
        ON c.employee_id = e.employee_id 
      LEFT JOIN project p
        ON p.project_id = c.project_id
     WHERE clock_in LIKE '%DEC%'
     GROUP BY p.project_name, e.employee_id, e.employee_first_name, e.employee_last_name
    

    GROUP BY 列表中的最后三列分别代表每个不同的员工

    【讨论】:

    • 哇,非常感谢!我一直在绞尽脑汁想弄清楚这一点。非常感谢:-)
    • 不客气@rrup,请将答案标记为帮助。
    【解决方案2】:

    为什么需要LEFT JOIN?您是否期望在没有员工或项目的情况下上班?你应该使用INNER JOIN 而你的解决方案很简单group bysum 如下:

    SELECT p.project_name, e.employee_id, e.employee_first_name, e.employee_last_name, 
           SUM((clock_out - clock_in) * 24) AS hrs_worked_dec 
      FROM clock c JOIN employee e ON c.employee_id = e.employee_id 
      JOIN project p ON p.project_id = c.project_id
     WHERE c.clock_in LIKE '%DEC%'
     GROUP BY p.project_name, e.employee_id, e.employee_first_name, e.employee_last_name
    

    此外,clock_in 中的DEC 将包含所有 12 月的数据(2020 年、2019 年……),因此请谨慎使用。

    【讨论】:

    • 是的,任何clock_in 都将始终具有employee_id 和project_id,因为这是复合键。这次真是万分感谢! :-)
    猜你喜欢
    • 2019-01-30
    • 2011-08-29
    • 2017-07-11
    • 2016-08-13
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2023-02-17
    • 2012-07-19
    相关资源
    最近更新 更多