我需要根据四个表中的数据生成结果表。MYSQL计数跨多个表的查询
这些表是 '用户', '部门', 'report_info', 'report_eval'。基本上一个报告是关于用户的创建,并提供有关报告“report_info”如一些基本信息一起保存:
report_info:
report_id
uid
report_date
report_title
...
当用户报告评估其保存在“report_eval '
report_eval:
id
report_id
report
grade
一种用于报告等级可以是四个字母A的一个,B,C,d
每个用户都属于一个部门。用户的表看起来像:
用户:
uid
forename
surname
dept_id
...
department表看起来是这样的:
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
我的查询结果被列,但是,所有等级计数都设置为零。
希望这一切是很有意义的。任何人都可以调整我的查询,让我指向正确的方向。
非常感谢所有帮助。提前致谢。
EDIT 1
SQL小提琴由@peterm的要求:
http://sqlfiddle.com/#!2/c1f81/2
编辑2
刚刚意识到; @ Meherzad的答案不能完全工作,如果没有一个部门的价值,那么它没有列出他们。对不起,如果这不是最初的问题,但我需要显示空值。
编辑3 - 答 的@ Meherzad的回答和我最初的查询产生正确的结果的适应。感谢@Meherzad。下面是最新的SQL小提琴:http://sqlfiddle.com/#!2/73015/1
你可以发布所有表格的样本数据,最好是以sqlfiddle的形式? – peterm