gpt4 book ai didi

MySQL同一查询结果出现多个子查询

转载 作者:行者123 更新时间:2023-11-29 12:19:18 24 4
gpt4 key购买 nike

我正在尝试优化以下查询。

SELECT t3.*, 
(SELECT SUM(t4.col_sum)
FROM (...) t4
WHERE t4.timestamp BETWEEN CONCAT(SUBSTR(t3.timestamp, 1, 11), "00:00:00") AND t3.timestamp)
AS cum_sum
FROM (...) t3

其中(...)是长查询的容器。它产生 2 列:时间戳和 col_sum。我想通过编写查询向其添加第三列。第三列是 col_sum 的累积和。

问题是我在两个地方放置了相同的大查询(...)

有没有办法获得结果并在这两个/多个地方使用该结果(...)?

最佳答案

一种方法是使用临时表。

可能更有效的方法是使用变量来计算累积和。它会是这样的:

  select t.*,
(@c := if(@t = left(t.timestamp, 11), @c + t.col_sum,
if(@t := left(t.timestamp, 11), 0, 0)
)
) as cumesum
from (. . .) t cross join
(select @t := '', @c := 0) vars
order by t.timestamp;

上面的查询按时间戳对行进行排序。变量 @t 跟踪时间戳中的前 11 个字符 - 当我读到你的逻辑时,你只想在一个恒定的组内进行累积和。

变量@c 跟踪累积和,当遇到新的“前 11 个字符”时重置为零。逻辑看起来有点复杂,但最好将所有变量赋值放在一个表达式中,因为MySQL不保证表达式求值的顺序。

关于MySQL同一查询结果出现多个子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29277822/

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