[英]Sum up values from rows in MySQL table
我已在表中添加了新列“ sums”,并尝试根据表中所示的算法对“ vals”列中的值求和,然后更新同一表中的“ sums”。
我可以在PHP中编写一些循环,但我认为这不会很好。
任何线索如何很好地编写它?
-------------------------------------------------- | id | sets | parts | vals | sums | |-------|---------|---------|----------|---------| | 1 | 1 | 1 | 2 | 2 | |-------|---------|---------|----------|---------| | 2 | 1 | 2 | 3 | 2+3=5 | |-------|---------|---------|----------|---------| | 3 | 1 | 3 | 5 |2+3+5=10 | |-------|---------|---------|----------|---------| | 4 | 2 | 1 | 4 | 4 | |-------|---------|---------|----------|---------| | 5 | 2 | 2 | 1 | 4+1=5 | |-------|---------|---------|----------|---------| | 6 | 2 | 3 | 2 | 4+1+2=7 | |-------|---------|---------|----------|---------| | 7 | 3 | 1 | 6 | 6 | |-------|---------|---------|----------|---------|
这应该返回您想要的总和值:
SELECT t.id
, IF(t.sets=@prev_sets,@i:=@i+t.vals,@i:=t.vals) AS `sums`
, @prev_sets := t.sets AS prev_sets
FROM mytable t
JOIN (SELECT @prev_sets := NULL, @i := 0 ) i
ORDER BY t.sets, t.parts
您可以将其用作更新语句中的内联视图
UPDATE ( SELECT t.id
, IF(t.sets=@prev_sets,@i:=@i+t.vals,@i:=t.vals) AS `sums`
, @prev_sets := t.sets AS prev_sets
FROM mytable t
JOIN (SELECT @prev_sets := NULL, @i := 0 ) i
ORDER BY t.sets, t.parts
) s
JOIN mytable r
ON r.id = s.id
SET r.sums = s.sums
从示例数据来看,您似乎希望在sets
上进行“分组”,并希望对每个组中的parts
进行订购。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.