首页 > 解决方案 > 在 3 表连接查询中减去另一个分组聚合列

问题描述

我对加入和高级查询很陌生,我想做的是加入三个表来汇总员工在课程上花费的时间(示例中省略了课程数据)。

!-SQL 查询在示例表下方-!

查询必须显示:


ID 员工ID
1 “安纳奇亚拉大流士”
2 “萨马尔·拉贾尼”
3 “唐加埃里克”
4 “第谷西格达”
5 “纳维乌斯·马特维”
6 “Theophania Eglantine”
7 《博罗斯坦尼斯拉夫》
ID 员工ID hours_done
1 1 2.50
2 1 2.80
3 2 5.60
4 2 3.30
5 4 4.50
6 5 8.90
7 6 7.60
8 3 6.50
9 7 1.00
10 5 10.30
11 7 11.50
12 5 5.60
13 7 100.00
14 2 30.00
ID 员工ID hours_allocated
1 1 12
2 2 16
3 3 20
4 4 15
5 5 10
6 6 7
7 7 8
    SELECT ACCOUNTING.EMPLOYEE_ID AS EMPLOYEE_ID,
    EMPLOYEE.EMPLOYEE_NAME AS EMPLOYEE_NAME,
    ALLOCATED.HOURS_ALLOCATED,
    SUM(ACCOUNTING.HOURS_DONE) AS HOURS_SPENT,
    SUM(ALLOCATED.HOURS_ALLOCATED - ACCOUNTING.HOURS_DONE) AS ALLOWANCE
FROM PUBLIC.ACCOUNTING ACCOUNTING
INNER JOIN
                (SELECT EMPLOYEE_NAME,
                        EMPLOYEE_ID
                    FROM PUBLIC.EMPLOYEES GROUP
            BY EMPLOYEE_ID) EMPLOYEE ON EMPLOYEE.EMPLOYEE_ID = ACCOUNTING.EMPLOYEE_ID
INNER JOIN
                (SELECT HOURS_ALLOCATED,
                        EMPLOYEE_ID
                    FROM PUBLIC.ALLOCATION GROUP
      BY EMPLOYEE_ID,
                        HOURS_ALLOCATED) ALLOCATED ON ALLOCATED.EMPLOYEE_ID = ACCOUNTING.EMPLOYEE_ID GROUP
    BY ACCOUNTING.EMPLOYEE_ID,
    EMPLOYEE_NAME,
    ALLOCATED.HOURS_ALLOCATED
ORDER
    BY EMPLOYEE_NAME ASC 
员工ID 员工姓名 hours_allocated hours_spent 津贴
1 “安纳奇亚拉大流士” 12 5.3 18.7
7 《博罗斯坦尼斯拉夫》 8 112.5 -88.5
5 “纳维乌斯·马特维” 10 24.8 5.2
2 “萨马尔·拉贾尼” 16 38.9 9.1
3 “唐加埃里克” 20 6.5 13.5
6 “Theophania Eglantine” 7 7.6 -0.6
4 “第谷西格达” 15 4.5 10.5

如您所见,我设法让每一列都正确显示了我想要的信息。问题:

我用来获得津贴的线路是

我一直在尝试不同的东西,但似乎无法管理这部分查询。如何将其纳入组逻辑?

标签: sqlgroup-byinner-join

解决方案


答案发布在评论中。

ALLOCATED.HOURS_ALLOCATED - SUM(ACCOUNTING.HOURS_DONE)正确但不正确

`SUM(ALLOCATED.HOURS_ALLOCATED - ACCOUNTING.HOURS_DONE)` AS ALLOWANCE

推荐阅读