gpt4 book ai didi

mysql - 如何在 mysql 5.7 中使用 sum over partition (without window function)

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

我想知道 mysql 5.7 引擎如何与部分求和相同。不能替换查询引擎,因为它不是个人操作。

曾尝试通过@set 变量函数来解决,但我发现很难得到四列中每一列的累加和。

我查看了下面的链接,但解决起来有点困难。 how to rank over partition in MySql

我的 table

id      a      b     c     d
----------------------------
abs 1 0 0 1
abs 0 1 1 0
abs 1 0 1 0
abs 1 1 1 1
qwe 0 0 0 0
qwe 0 0 0 1
qwe 1 0 1 0
qwe 1 1 0 1
trx 0 1 1 0
trx 1 1 0 0

预期

id      a      b     c     d
----------------------------
abs 1 0 0 1
abs 1 1 1 1
abs 2 1 2 1
abs 3 2 3 2
qwe 0 0 0 0
qwe 0 0 0 1
qwe 1 0 1 1
qwe 2 1 1 2
trx 0 1 1 0
trx 1 2 1 0

提前致谢。

最佳答案

您需要每一列的累计总和。为了使其正常工作,您需要一个指定顺序的列——SQL 表表示无序 集。

假设您有这样一个列,那么通常可以使用以下方法:

select t.*,
(@a := if(@id = id, @a + a, 0)) as a,
(@b := if(@id = id, @b + b, 0)) as b,
(@c := if(@id = id, @c + c, 0)) as c,
(@d := if(@id = id, @d + d, 0)) as d,
@id := id
from (select t.*
from t
order by t.id, ? -- column for the ordering
) t cross join
(select @id := -1, @a := 0, @b := 0, @c := 0 @d := 0) params;

但是,这并不保证有效,因为 MySQL 不保证 SELECT 中表达式的求值顺序。所以,我认为子查询可能是最简单的方法:

select t.id,
(select sum(t2.a) from t t2 where t2.id = t.id and t2.? <= t.?) as a,
(select sum(t2.b) from t t2 where t2.id = t.id and t2.? <= t.?) as b,
(select sum(t2.c) from t t2 where t2.id = t.id and t2.? <= t.?) as c,
(select sum(t2.d) from t t2 where t2.id = t.id and t2.? <= t.?) as d
from t;

关于mysql - 如何在 mysql 5.7 中使用 sum over partition (without window function),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56782938/

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