外键的累积和查询

时间:2015-07-20 23:58:48

标签: mysql sql

我想在MYSQL中写一个累积和的查询。我的表中有一个外键,我想将它们的小时数作为累计总和。

表1

id(not primary key)   Hours
1                       4
2                       4
1                       5

我试过这个查询

select spent_hours := spent_hours + hours as spent 
from time 
join (select spent_hours := 0) s

我收到了这个

id(not primary key)    hours    spent
1                       4        4
2                       4        8
1                       5        13

但我想要这个结果:

id(not primary key)    Hours spent
1                       4    4
2                       4    4
1                       5    9

2 个答案:

答案 0 :(得分:1)

由于你有一个自动增量字段(让我们假设这个案例叫做record_id)你可以用这个小技巧来实现你想要的东西:

SELECT Main.id, Main.spentHours,
(
    SELECT SUM(spentHours) 
    FROM Table1 WHERE Table1.id = Main.id
    AND Table1.record_id >= Main.record_id
) as totalSpentHours
FROM Table1 Main
ORDER BY Main.record_id ASC

这将获取id,当前花费的时间,使用子选择,从该用户的当前ID及以上的所有小时。

答案 1 :(得分:0)

您需要额外的变量来跟踪每个ID中的累积总和:

select t.id, t.hours,
       (@h := if(@i = id, @h + spent_hours,
                 if(@i := id, spent_hours, spent_hours)
                )
       ) as spent
from time cross join
     (select @h := 0, @i := 0) params
order by id, ??;

注意:您需要一个额外的列来指定累积总和的顺序(由??子句中的order by表示。请记住,SQL表代表无序集,所以你需要一个列来明确表示排序。