【发布时间】:2018-02-10 18:25:04
【问题描述】:
我试图通过加入多个表从 sql 查询中获得所需的结果。由于本人知识有限,望大家帮忙。
我正在尝试获取每个经理和员工的审核详细信息。我有 3 张桌子:
1. HR
2. REQUIRED_AUDITS
3. SCORE_ENTRY
以下是HR表的示例数据:
+----+---------------+------------------+
| id | manager_email | VP |
+----+---------------+------------------+
| 1 | john@com.com | jake@com.com |
| 2 | smith@com.com | kathleen@com.com |
| 3 | maria@com.com | james@com.com |
| 4 | linda@com.com | david@com.com |
| 5 | jess@com.com | kim@com.com |
+----+---------------+------------------+
以下是 REQUIRED_AUDITS 表的示例数据:
+----+---------------+----------------+-----------------+----------------+
| ID | manager_email | employee_email | audits_required | audit_eligible |
+----+---------------+----------------+-----------------+----------------+
| 1 | john@com.com | brad@com.com | 5 | Y |
| 2 | linda@com.com | gloria@com.com | 2 | Y |
| 3 | linda@com.com | susan@com.com | 7 | Y |
| 4 | john@com.com | carmen@com.com | 5 | Y |
| 5 | linda@com.com | aaron@com.com | 25 | N |
+----+---------------+----------------+-----------------+----------------+
以下是 SCORE_ENTRY 表的示例数据:
+----+---------------+----------------+-------+
| ID | manager_email | employee_email | Score |
+----+---------------+----------------+-------+
| 1 | linda@com.com | gloria@com.com | 85.04 |
| 2 | linda@com.com | susan@com.com | 100 |
| 3 | john@com.com | carmen@com.com | 80.50 |
+----+---------------+----------------+-------+
所以现在我想显示每位经理所需的审核次数、完成的审核次数以及完成的百分比。
+-------------------------------+----------------------------------------------------------------------------+--------------------------------------------+-----------------------+
| Manager(list from "HR" table) | Total Audits Required(Sum of audits required from "REQUIRED_AUDITS table") | Audits Performed(from "SCORE_ENTRY" table) | Percentage Completion |
+-------------------------------+----------------------------------------------------------------------------+--------------------------------------------+-----------------------+
| john@com.com | 10 | 1 | 10% |
| linda@com.com | 9 | 2 | 22.22% |
| smith@com.com | - | - | - |
| maria@com.com | - | - | - |
| jess@com.com | - | - | - |
+-------------------------------+----------------------------------------------------------------------------+--------------------------------------------+-----------------------+
计算如下:
1. 计算审核次数,即从 REQUIRED_AUDITS 表:
考虑经理 linda@com.com:
所需审核总数:7+3,因为只有两名员工符合条件
2. 完成的审计总数:
audits_required(来自 REQUIRED AUDITS 表)- 已完成审计(来自 SCORE_ENTRY 表)
如前所述,我对 sql 的了解有限,这对我来说看起来真的很复杂,因此在 Stack Overflow 中伸出援手。
感谢任何帮助。
更新 为了进一步简化流程,我编写了不包括 HR 表的离散查询,并且在组合以下查询时需要帮助。
查询1:我称之为“DENOMINATOR”:
SELECT required_audits.manager_email,
SUM(audits_required) AS "TOTAL_AUDITS_REQUIRED"
FROM required_audits
WHERE Upper(required_audits.audit_eligible) = Upper('Y')
GROUP BY required_audits.manager_email
ORDER BY "total_audits_required" DESC
+-------------------------------+-----------------------+
| required_audits.manager_email | TOTAL_AUDITS_REQUIRED |
+-------------------------------+-----------------------+
| john@com.com | 10 |
| linda@com.com | 9 |
+-------------------------------+-----------------------+
查询 2:我称之为 "NUMERATOR":
SELECT score_entry.manager_email,
Count(id)
FROM score_entry
GROUP BY score_entry.manager_email
+---------------------------+-----------+
| score_entry.manager_email | Count(id) |
+---------------------------+-----------+
| john@com.com | 1 |
| linda@com.com | 2 |
+---------------------------+-----------+
在最终或结果中,我需要的只是 NUMERATOR**/**DENOMINATOR * 100 的百分比。我对连接和在 where 子句中应用条件感到困惑。
+---------------+-----------------------+------------------+-----------------------+
| Manager | Total Audits Required | Audits Performed | Percentage Completion |
+---------------+-----------------------+------------------+-----------------------+
| john@com.com | 10 | 1 | 10% |
| linda@com.com | 9 | 2 | 22.22% |
+---------------+-----------------------+------------------+-----------------------+
在结果表中,仅应显示审核合格的数字。这是出错的另一个原因。
提前致谢。
谢谢,
里查
【问题讨论】:
-
您的原始结果集在 HR 表中显示 所有 个经理。您的第二个结果集仅显示 REQUIRED_AUDITS 表中有员工的经理。如果您不断更改要求,我们将无法提供解决方案。请编辑您的问题,使其始终保持一致。
-
@APC。感谢您的反馈。我试图用更简化的术语来解释相同的原始 OP。我不确定这会造成混乱。我考虑了您关于为什么要使用 HR 表的建议,因为我在技术上从 REQUIRED_AUDITS 表和 SCORE_ENTRY 表中收集信息。现在我想我确实需要 HR 表,因为它有更多的列,如名字、姓氏、电话号码等,所以觉得包含 HR 表会很好。为了简化数据,我没有包括这些列。如果我需要使用经理的名字,那么我将不得不加入 HR 表。再次抱歉。