gpt4 book ai didi

MySQL为什么在使用聚合函数时自动求和

转载 作者:行者123 更新时间:2023-11-29 01:02:48 25 4
gpt4 key购买 nike

我正在尝试编写一个 MySQL 查询来计算数字列的标准差,而不使用 STD()。我的工作查询如下:

SELECT sqrt(power((amount-avg(amount)),2)/count(amount))
FROM Orders;

请将“金额”视为列名,将“订单”视为表名。我的问题是为什么在不使用求和函数的情况下会自动对 power((amount-avg(amount)),2) 的所有结果求和?

谢谢!

最佳答案

您正在使用 count() 函数,这是一个聚合函数,因此您将所有行分组。在您的查询中,amount 不是作为总和计算的,它仅使用某些行的值(不确定使用哪个行的值),因为 MySQL 允许将非分组列与分组列结合使用。

在这里阅读更多: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

如果你只想自己实现它,你可以尝试这样查询:

SELECT @avg:=(SELECT avg(amount) FROM Orders), @cnt:=(SELECT count(*) FROM Orders), 
SQRT(SUM(POWER(amount-@avg,2)/@cnt)) as std
FROM Orders

这将执行两个快速查询,获取平均值并只计算一次(因为每一行仍然相同),然后它将对您的公式求和并将其 sqrt 作为 std 返回。

关于MySQL为什么在使用聚合函数时自动求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30690377/

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