MySQL查询求助:统计员工项目总工时与总收入关联错误
解决方案
直接给你能得到正确结果的SQL语句:
SELECT r.idEmploye, e.nomEmploye, e.adresseCourriel, COALESCE(r.nbrHeures, 0) AS nbrHeures, COALESCE(r.somme_gagnée, 0) AS `somme gagnée` FROM employe_ e LEFT JOIN ( SELECT idEmploye, SUM(nbrHeure) AS nbrHeures, SUM(nbrHeure * PrixHeure) AS somme_gagnée FROM ressourcesprojet_ GROUP BY idEmploye ) r ON e.idEmploye = r.idEmploye;
关键说明
- 用
LEFT JOIN是为了确保所有员工都能被显示——哪怕有的员工没参与任何项目,总工时和收入会显示为0(通过COALESCE处理NULL值);如果只需要统计有项目记录的员工,把LEFT JOIN换成INNER JOIN即可。 - 关联条件必须用员工ID匹配:
e.idEmploye = r.idEmploye,这是两张表唯一的关联逻辑,你之前用姓名匹配ID完全不符合数据关系,自然查不到结果。
你的三个查询错误分析
- 第一个查询:没加
ON条件的内连接会产生笛卡尔积,也就是每个员工统计结果和所有员工信息强制匹配,导致数据大量重复,属于完全错误的写法。 - 第二个查询:子查询去掉
GROUP BY后,SUM会把所有员工的工时、收入汇总成一行总数据,再和员工表连接时,每个员工都会重复这行总数据,根本不是按单个员工统计的结果。 - 第三个查询:用
e.nomEmploye = r.idEmploye作为关联条件,姓名是字符串,ID是员工编号(类型或内容完全不匹配),两者没有对应关系,所以没有匹配结果。
内容的提问来源于stack exchange,提问作者Lithio3D
相关产品推荐
相关产品推荐

