mysql - 此嵌套查询的替代方法?

标签 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
)

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

最佳答案

您的结果中的小时数有什么用? 如果你只需要总和,你可以这样做:

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

关于mysql - 此嵌套查询的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553673/

相关文章:

mysql - 对于不存在的 ID,我是否需要在 SQL 表中使用 NULL 值

java - servlet 和 JSP 的使用

sqljdbc4.jar 上的 Java SQL 异常

jQuery,计算文本框值的总和

Python 一行

mysql - 在 MySQL 中创建表 'ShoppingCart' - 错误 1005

php - 如何使用基于 YYYY-MM 日期选择的另一个表中的值执行迭代计算并将其写回第一个表?

sql - 给定纬度/经度的基于距离的 JOIN

python - 仅当日期和时间不冲突时才保存新实体(播放)

mysql - 两个表中两列的总和