[英]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.