gpt4 book ai didi

MYSQL 跨多个表的计数查询

转载 作者:行者123 更新时间:2023-11-29 08:29:55 25 4
gpt4 key购买 nike

我需要根据四个表中的数据生成一个结果表。

这些表是“users”、“departments”、“report_info”、“report_eval”。基本上,报告是关于用户创建的,并与报告的一些基本信息一起存储在“report_info”中,例如:

报告信息:

report_id
uid
report_date
report_title
...

评估用户报告后,会将其保存在“report_eval”中

报告评估:

id
report_id
report
grade

报告的等级可以是四个字母 A、B、C、D 之一

每个用户属于一个部门。用户的表看起来像这样:

用户:

uid
forename
surname
dept_id
...

部门表如下所示:

dept_id
dept_name

我需要生成一个结果列表,显示每个级别所有部门的每个级别的金额等级。一个例子是:

Department | A | B | C | D 
----------------------------
Finance | 0 | 1 | 0 | 3
Sales | 6 | 2 | 3 | 1
Admin | 0 | 0 | 0 | 0
...

等等

到目前为止,我的查询如下,但没有给出所需的结果:

SELECT 
d.dept_id,
d.dept_name,
COUNT(NULLIF(re.grade, 'A')) AS gradeA,
COUNT(NULLIF(re.grade, 'B')) AS gradeB,
COUNT(NULLIF(re.grade, 'C')) AS gradeC,
COUNT(NULLIF(re.grade, 'D')) AS gradeD
FROM report_eval re
JOIN report_info ri ON ri.report_id=re.report_id
JOIN users u ON u.uid=ri.uid
RIGHT JOIN departments d ON d.dept_id=u.uid
GROUP BY d.dept_id

我的查询结果列出了所有部门,但是所有成绩计数都设置为零。

希望这一切都有道理。任何人都可以调整我的查询来为我指明正确的方向吗?

非常感谢所有帮助。提前致谢。

编辑 1

按照 @peterm 的要求,SQL Fiddle:

http://sqlfiddle.com/#!2/c1f81/2

编辑2

刚刚意识到;如果一个部门没有值,那么 @Meherzad 的答案就不能完全起作用,那么它就不会列出它们。抱歉,如果从最初的问题来看这还不清楚,但我需要显示空值。

编辑 3 - 答案@Meherzad 的答案和我最初的查询的改编产生了正确的结果。感谢@Meherzad。这是最新的 SQL Fiddle:http://sqlfiddle.com/#!2/73015/1

最佳答案

尝试这个查询

SELECT 
d.dept_Name,
sum(if(re.grade='A', 1, 0)) as 'A',
sum(if(re.grade='B', 1, 0)) as 'B',
sum(if(re.grade='C', 1, 0)) as 'C',
sum(if(re.grade='D', 1, 0)) as 'D'
FROM
dept d
INNER JOIN
users u
ON
u.dept_id=d.dept_id
INNER JOIN
report_info ri
ON
ri.uid=u.uid
INNER JOIN
report_eval re
ON
re.report_id=ri.report_id
GROUP BY
d.dept_Name

关于MYSQL 跨多个表的计数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com