MySQL-带两个表的按和分组
我使用的是MySQL 5.1,我有两个表,projects和employee。员工编号项目中有一个外键,它是projectscode\u项目的主键 -->确切地说: 我正在通过此查询尝试按部门获取项目总数:MySQL-带两个表的按和分组,mysql,sql,group-by,sum,Mysql,Sql,Group By,Sum,我使用的是MySQL 5.1,我有两个表,projects和employee。员工编号项目中有一个外键,它是projectscode\u项目的主键 -->确切地说: 我正在通过此查询尝试按部门获取项目总数: SELECT emp.department_emp AS Department, SUM( pro.price ) AS total_department FROM employee AS emp, projects AS pro WHERE emp.number_project = pro
SELECT emp.department_emp AS Department, SUM( pro.price ) AS total_department
FROM employee AS emp, projects AS pro
WHERE emp.number_project = pro.code_project
GROUP BY emp.department_emp
它返回:
DEPARTMENT TOTAL_DEPARTMENTA
Accounting 2600
IT 4200
但它应该返回:
DEPARTMENT TOTAL_DEPARTMENT
Accounting 1300
IT 4200
问题是,当同一部门的员工在同一个项目中工作时,当查询对同一个项目进行多次求和时
谢谢 您可以使用折叠员工的子查询,从项目中任意选择一名员工的部门:
SELECT department,
SUM(price) AS total_department
FROM ( SELECT project.code_project AS project,
project.price AS price,
MIN(employee.department_emp) AS department
FROM project
JOIN employee
ON project.code_project = employee.number_project
GROUP
BY project.code_project,
project.price
)
GROUP
BY department
;
当然,如果单个项目有来自多个不同部门的员工,这会产生误导性的结果,因为它会将项目的全部价格分配给其中一个部门。使用子查询创建唯一的部门、项目组合列表:
select e.department_emp
, sum(p.price)
from (
select distinct department_emp
, number_project
from Employee
) e
join Projects p
on p.code_project = e.number_project
group by
e.department_emp
您的数据库可能需要一些认真的工作。员工与项目之间应该是多对多关系,而不是多对一关系。名为number的字段不应在另一个表中被称为code。选择emp.department\u emp作为department,SUM pro.price作为total\u department 从选择不同* 员工作为emp,项目作为专业人员 其中emp.number\u项目=专业代码\u项目 AS P
按emp.department\u emp分组正如你最后所说,这个答案毫无意义。为什么要发布它?@Andomar。如果一个项目的员工可能在多个部门,您的解决方案将返回错误的结果。你的批评似乎不公平。@GordonLinoff:任意地将一个项目分配给一个部门,或者更确切地说,按字母顺序排列的第一个部门是没有意义的——我想,除非你为会计工作。关于重复计算项目,你说得很好,但这是正常的,因为这个部门在类型查询中涉及多少资本支出。@Andomar。一个项目中有多个员工。每个员工在他们自己的部门。这是两种方法的问题。如果这种情况不能发生,那么它可能与OPs情况无关,因为某种原因。@Andomar:你的回答也毫无意义:它在同样的情况下给出了误导性的结果。然而,你把它贴了出来。如果两名来自不同部门的员工在同一个项目上工作,你会怎么做?谢谢你的回答。我知道数据库不好。我只是想练习一下