我试图通过连接多个表从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中有所涉足。
感谢任何帮助。
UPDATE 为了进一步简化过程,我编写了不包含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%。我对join和在where子句中应用条件感到困惑。
+---------------+-----------------------+------------------+-----------------------+
| Manager | Total Audits Required | Audits Performed | Percentage Completion |
+---------------+-----------------------+------------------+-----------------------+
| john@com.com | 10 | 1 | 10% |
| linda@com.com | 9 | 2 | 22.22% |
+---------------+-----------------------+------------------+-----------------------+
在结果表上,仅应显示符合审计条件的数字。这是哪里出了问题的另一个原因。
提前致谢。
谢谢
您可以使用多个公用表表达式,分别计算每个表并将它们连接在一起-只是为了您了解发生了什么。
SQL小提琴
查询 :
WITH aud(manager_email,Total_audits) AS
(SELECT manager_email,
SUM (
CASE
WHEN audit_eligible = 'Y'
THEN audits_required
END )
FROM REQUIRED_AUDITS
GROUP BY manager_email
), --Total_audits
scores(manager_email,Audits_Performed) AS
(SELECT manager_email,
COUNT ( ID )
FROM SCORE_ENTRY s
GROUP BY manager_email
) --Audits_Performed
SELECT h.manager_email manager,
a.Total_audits,
s.Audits_Performed,
100 * s.Audits_Performed / a.Total_audits percentage_complete
FROM HR h
LEFT OUTER JOIN aud a
ON h.manager_email = a.manager_email
LEFT OUTER JOIN scores s
ON h.manager_email = s.manager_email
ORDER BY 2 DESC NULLS LAST
结果 :
| MANAGER | TOTAL_AUDITS | AUDITS_PERFORMED | PERCENTAGE_COMPLETE |
|---------------|--------------|------------------|---------------------|
| john@com.com | 10 | 1 | 10 |
| linda@com.com | 9 | 2 | 22.22222222222222 |
| smith@com.com | (null) | (null) | (null) |
| jess@com.com | (null) | (null) | (null) |
| maria@com.com | (null) | (null) | (null) |
在Crystal Reports中,我使用以下查询(针对Oracle数据库)为报表中的单个字段生成数据: 这可以很好地工作,并基于提供的{HB_As_At_Date}(the{?}语法是Crystal将参数值嵌入SQL(SQL)的方法。不过,上述查询的内容不是我的问题——我想做的是在几个不同的日期重复运行它,并将输出输入Crystal以供在报告中使用。 假设我希望在9月的每个星期一运行这个查询,我
问题内容: 我想计算上个月的总订单金额。 我得到了从当前日期获取当前月份数据的查询。 现在,我如何仅获取前一个月的数据,不包括本月。 例如,本月(7月)我赚了15,000美元,上个月(6月)我赚了14,000美元。 通过运行上述查询,我得到了$ 15,000。 但是我不知道如何计算上个月。 问题答案: 在这里,您可以使用它在MySQL中获取上个月的第一个月到上个月的最后一天之间的日期:
问题内容: 我目前有一个表,用于存储大量项目的统计数据,例如视图,下载,购买等。为了对每个项目进行一次操作计数,我可以使用以下查询: 这给了我所有的内容以及他们的看法。然后,我可以将其他变量的“视图”更改为“购买”或“下载”。但是,这意味着对数据库的三个单独的调用。 一口气拿下所有三个都可以吗? 问题答案: 将返回一个表, 其中每个item_id和operation一行一行 ,包含三列:item_
问题内容: 有什么办法可以让子查询在oracle db中返回多个列?(我知道此特定的sql会导致错误,但总的来说我想要的很好) 我想要这样的结果: 我知道可以通过联接解决此问题,但这不是我要的。 我的问题很简单,是否有办法从子查询中获取两个或多个值?也许一些解决方法使用双重?这样就没有实际的联接,但是每行都有一个新的子查询? 编辑:这是一个原则性问题。我知道,您可以使用join解决所有这些问题。您
问题内容: 我很难优化我的SQLAlchemy查询。我的SQL知识非常基础,我无法从SQLAlchemy文档中获得所需的知识。 假设以下非常基本的一对多关系: 我怎么能: 查询每个父母的元组? 经过相当长的搜索时间后,我发现了如何分别查询这些值: 我试图以不同的方式将它们组合在一起,但没有设法得到我想要的。 查询所有顽皮孩子超过80%的父母?编辑:顽皮可能为NULL。 我猜想此查询将基于上一个查询
问题内容: 我正在尝试在单个查询中计算两列,但结果却为medcount和uploadcount吐出了相同的值。有什么建议? 问题答案: 使用: