gpt4 book ai didi

mysql - 如何跨多个列进行级联递减

转载 作者:行者123 更新时间:2023-11-28 23:41:03 25 4
gpt4 key购买 nike

我有 N 列:A、B、C、.. N 每列都是小数 (8,2)。我想编写一个存储过程,它接受一个行 ID 和一个小数点 (8,2) X。

我希望它递减 A 直到 A 达到零或直到它减少 X。如果 A 达到零并且 X 大于 A 那么我想将 B 递减 X - A 的原始值等等。

例子:

select * from foo_table where id = 0;

| id| A | B | C |..
+---+---+---+---+
| 0 | 5 | 3 | 2 |

call my_stored_proc(0,9);
select * from foo_table where id = 0;

| id| A | B | C |..
+---+---+---+---+
| 0 | 0 | 0 | 1 |

执行此操作的推荐和高效方法是什么?

最佳答案

鉴于您的示例数据,此查询完成了这项工作:

UPDATE t
JOIN (

SELECT
t.id,
GREATEST(A - @a, 0) A,
@a := GREATEST(@a - A, 0),
GREATEST(B - @a, 0) B,
@a := GREATEST(@a - B, 0),
GREATEST(C - @a, 0) C,
@a := GREATEST(@a - C, 0)
FROM
t
, (SELECT @a := 9) var_init_subquery
WHERE id = 0
ORDER BY id

) sq ON t.id = sq.id
SET t.A = sq.A
, t.B = sq.B
, t.C = sq.C;
  • 看到它在 sqlfiddle 中实时运行
  • here您可以阅读有关查询中变量的更多信息

关于mysql - 如何跨多个列进行级联递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34391394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com