Mysql 此嵌套查询的替代方法?

Mysql 此嵌套查询的替代方法?,mysql,sql,sum,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 | timeshe

我有以下疑问:

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
)

因此,您可以看到,我试图在每个作业的总小时数旁边显示每个时间表上记录的小时数。一项作业可以有许多时间表。有没有更有效的方法来实现这一点?

您的结果中的小时数有什么用途? 如果您只需要总和,您可以执行以下操作:

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

如果您有兴趣了解如何使用窗口函数(不适用于MySQL,但大多数其他现代RDBMS都有)实现这一点,请告诉我们。SQL语句看起来会更好。编辑:顺便说一句,仅供参考,MySQL不支持itI。我现在一直在使用MySQL:/n考虑提供适当的DDL(和/或SQLFIDLE)以及所需的结果集。相关子查询的效率几乎总是比不相关的子查询低。@表/查询非常琐碎,我认为没有必要这样做,但我已更新了问题。由于此分组是按时间表id进行的,因此它不会汇总每个作业id的所有时间表小时数。您阅读了问题吗?因此,您可以看到,我试图在每个作业的总小时数旁边显示每个时间表上记录的小时数,@RonSmith是对的,这不是作业的总小时数,我的错。。我想不出更好的办法了。