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是对的,这不是作业的总小时数,我的错。。我想不出更好的办法了。