这个嵌套查询的替代方法?

时间:2014-05-08 22:28:44

标签: mysql sql sum

我有以下查询:

SELECT t.assignment_id, 
        t.timesheet_id, 
        t.hours, 
        (SELECT SUM(tss.hours) FROM timesheets tss 
               WHERE tss.assignment_id = t.assignment_id) as 'sumhours'
FROM timesheets t

产生:

assignment_id  |  timesheet_id  |   hours  |  sumhours
---------------------------------------------------------
      2               2              4.50         8.00
      2               3              3.50         8.00
      3               4              0.00         0.00
      3               5              0.00         0.00

表格定义:

'timesheets' (
      'timesheet_id' int(11) AUTO_INCREMENT,
      'hours' decimal(10,2),
      'assignment_id' int(11),
       PRIMARY KEY ('timesheet_id'),
       CONSTRAINT 'assignment_fk' FOREIGN KEY ('assignment_id') REFERENCES 'assignments' ('assignment_id') ON DELETE CASCADE ON UPDATE CASCADE
)

因此,您可以看到我正在尝试显示每个时间表上记录的小时数,而不是每个作业的总小时数。一个作业可以有多个时间表。有没有更有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

结果中的小时数有多少? 如果你只需要总和,你可以这样做:

SELECT t.assignment_id, 
       t.timesheet_id, 
       SUM(t.hours)
FROM timesheets t
GROUP BY t.assignment_id, t.timesheet_id