gpt4 book ai didi

MySQL 用户变量和 SUM 函数

转载 作者:可可西里 更新时间:2023-11-01 07:04:39 25 4
gpt4 key购买 nike

我正在尝试使用用户变量在 SELECT 查询中进行一些计算。这工作正常,直到我开始使用像 SUM 这样的函数从连接表中收集数据。

简化示例:

SET @a = 1;

SELECT @a := SUM(1 + 1) AS sum, @a

结果:

+------+------+| sum  | @a   |+------+------+|    2 |    1 |+------+------+

I'd expect @a to be 2 here.

Other example:

SELECT @b := SUM(1 + 1) AS sum, @b;
+------+------+| sum  | @b   |+------+------+|    2 | NULL |+------+------+

现在它是 NULL,因为 @b 在查询之前没有设置。

变量似乎没有被 SUM 函数的结果覆盖。有什么办法可以解决这个问题吗?

最佳答案

如前所述in the documentation :

作为一般规则,您永远不应该为用户变量赋值并在同一语句中读取该值。您可能会得到预期的结果,但这并不能保证。涉及用户变量的表达式的求值顺序是未定义的,可能会根据给定语句中包含的元素而改变;此外,不保证 MySQL 服务器版本之间的顺序相同。在 SELECT @a, @a:=@a+1, ... 中,您可能认为 MySQL 会先计算 @a,然后再进行赋值。但是,更改语句(例如,通过添加 GROUP BYHAVINGORDER BY 子句)可能会导致 MySQL 选择执行以不同的评估顺序进行计划。

到你问题的第二部分。您可以在这样的查询中初始化您的 @variable(首先评估子查询):

SELECT @b := SUM(1 + 1) AS sum, @b FROM (SELECT @b:=0) b

关于MySQL 用户变量和 SUM 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10551993/

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