sql - 在 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 |
如您所见,我设法让每一列都正确显示了我想要的信息。问题:
- 仅当员工仅在会计表中输入一项时,允许列才正确。
- 如果员工在会计中有多个条目,则计算是关闭/错误的。
我用来获得津贴的线路是
- SUM(ALLOCATED.HOURS_ALLOCATED - ACCOUNTING.HOURS_DONE) 作为 ALLOWANCE
我一直在尝试不同的东西,但似乎无法管理这部分查询。如何将其纳入组逻辑?
解决方案
答案发布在评论中。
ALLOCATED.HOURS_ALLOCATED - SUM(ACCOUNTING.HOURS_DONE)
正确但不正确
`SUM(ALLOCATED.HOURS_ALLOCATED - ACCOUNTING.HOURS_DONE)` AS ALLOWANCE
推荐阅读
- sql - 如何显示每个月的总利润,当oracle中当月没有记录时显示null
- django - 如何在 Django 中渲染模板并重定向到模板的某个片段?
- swift - 异步api调用后如何执行同步api调用
- javascript - Javascript OOP 方法返回“不是函数”
- r - 如何在列表中的多个二进制数据帧中找到 0 组的计数?
- python - 使用 python 捕捉到道路谷歌 API
- python - 根据约束生成日期数据
- airflow - 如果 DAG 已在运行,则跳过运行
- bash - 如何使用日期之怒从 bash 中的美国国家航空航天局下载图像
- javascript - 遍历html文件获取aa href