MySQL - 按两个表的 SUM 分组

标签 mysql sql group-by sum

我使用的是 MySQL 5.1,我有两个表,projects 和 employee。 employee(number_project)中有一个外键,它是projects(code_project)的主键。

---> 完全正确:SQL Fiddle

我正在尝试通过以下查询按部门获取项目的总和:

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

问题在于,当同一部门的员工在同一项目中工作时,查询多次对同一项目求和。

谢谢!

最佳答案

使用子查询创建一个独特的(department, project)组合列表:

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

Working example at SQL Fiddle.

您的数据库可能需要一些认真的工作。员工到项目应该是多对多关系,而不是多对一关系。并且一个名为“number”的字段在另一个表中不应该被称为“code”。

关于MySQL - 按两个表的 SUM 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707609/

相关文章:

MySQL 使用 max 选择详细信息

mysql - 使用 for 循环数组在 DUPLICATE KEY 上使用 INSERT INTO table 时出错

mysql - 按 id 更新最近更新的行

php - 将自动增量 id mysql 插入 mysqli

c# - 我应该在这里使用什么而不是 ExecuteScalar?

mysql - 查询MYSQL post_meta到新格式的表

sql - Oracle SQL 按带计数的列分组,但仅当该列为空或 0 时

mysql - 使用密码和用户名锁定 mysql 数据库

sql - 转换到自定义域 PostgreSQL

sql - Postgres : Group by on a column but query needs to return all columns in the table