根据用户获取每行的总和

时间:2014-10-21 00:42:23

标签: mysql sum row rollup

想知道如何根据用户获取每行总和的帮助? 我试图通过乘以员工的工作时间来计算项目的成本,然后将其计算为员工的工资率。我有3个表:员工,小时,项目

这类似于我的表格

对于员工表:

Name    |   Rate    |
Emp_A   |   10.50   |
Emp_B   |   15.00   |
Emp_C   |   25.10   |

小时表:

Employee    |   Hours   | Project
Emp_A       |   18.50   | PRJ.APP
Emp_A       |   10.00   | PRJ.APP
Emp_B       |   20.00   | PRJ.APP
Emp_B       |   5.30    | PRJ.APP
Emp_C       |   13.00   | PRJ.CAT
Emp_C       |   8.00    | PRJ.CAT

对于项目表:

Prj_Name    |   Prj_Code    |
Apple       |   PRJ.APP     |
Catalina    |   PRJ.CAT     |

这是我目前拥有的代码,它只是根据项目和用户获得总和

SELECT users.employee, SUM(timesheet.hours * 10.50)

FROM Projects prj, Hours timesheet, Employee users

WHERE prj.Prj_Name = 'PRJ.APP'

我希望获得的输出是例如当选择项目名称PRJ.APP时,它会获得已经处理该项目的员工,并且每行计算一次,因为每个员工的费率不同。

我尝试过像

这样的事情
SELECT if(users.employee = 'Emp_A', SUM(timesheet.hours * 10.50), SUM(timesheet.hours))

FROM Projects prj, Hours timesheet, Employee users

WHERE prj.Prj_Name = 'PRJ.APP'

但这只会获得Emp_A的总和,并根据示例表Emp_A和Emp_B在项目PRJ.APP上工作。

项目PRJ.APP的期望输出(员工A和B在PRJ.APP上工作):

|   Emp     |   Hours   |   Hours_Sum   |
|   A       |   28.50   |   285         |
|   B       |   25.30   |   379.5       |

小时列是小时表中“小时”的总和 而Hours_Sum是小时数的总和乘以员工各自的费率..

我希望你们能帮助我。提前谢谢!

1 个答案:

答案 0 :(得分:1)

如图所示修改您的查询,您必须在查询中使用joingroup by子句。此查询将根据每位员工每个项目所花费的小时数将结果返回为总费率

select e.name, p.prj_name,SUM(h.hours * e.rate)
from employee e inner join hours h on (e.name = h.employee)
inner join projects p on (p.prj_code = h.project)
group by e.name, p.prj_name