0

我在表中添加了一个新列“sums”,我正在尝试对“vals”列中的值求和,然后根据下表中显示的算法更新同一个表中的“sums”。

我可以在 PHP 中编写一些循环,但我不认为它会很好。

任何线索如何写得很好?

--------------------------------------------------
| 编号 | 套| 零件| 瓦尔斯 | 总和|
|-------|---------|---------|----------|---------|
| 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 |
|-------|---------|---------|----------|---------|


4

1 回答 1

0

这应该返回您想要的总和值:

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在每个组中进行排序。

于 2013-08-30T05:39:32.567 回答