MySQL为什么使用聚合函数时会自动求和
MySQL Why automatically sum when using aggregate function
我正在尝试编写一个 MySQL 查询来计算数字列的标准差,而不使用 STD()。我的工作查询如下:
SELECT sqrt(power((amount-avg(amount)),2)/count(amount))
FROM Orders;
请将 'amount' 视为列名,将 'Orders' 视为 table 名称。我的问题是为什么在不使用求和函数的情况下会自动对 power((amount-avg(amount)),2) 的所有结果求和?
谢谢!
您的 amount
列不计算总和。它是您的 table.
的某些行的值
您正在使用 count() 函数,它是一个聚合函数,因此您对所有行进行了分组。在您的查询中,金额不是作为总和计算的,它仅使用某些行的值(不确定使用哪一行的值),因为 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
这将执行两个快速查询,获取平均值并仅计数一次(因为每一行仍然相同)然后它将总结您的公式并将其 return sqrt 作为标准。
我正在尝试编写一个 MySQL 查询来计算数字列的标准差,而不使用 STD()。我的工作查询如下:
SELECT sqrt(power((amount-avg(amount)),2)/count(amount))
FROM Orders;
请将 'amount' 视为列名,将 'Orders' 视为 table 名称。我的问题是为什么在不使用求和函数的情况下会自动对 power((amount-avg(amount)),2) 的所有结果求和?
谢谢!
您的 amount
列不计算总和。它是您的 table.
您正在使用 count() 函数,它是一个聚合函数,因此您对所有行进行了分组。在您的查询中,金额不是作为总和计算的,它仅使用某些行的值(不确定使用哪一行的值),因为 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
这将执行两个快速查询,获取平均值并仅计数一次(因为每一行仍然相同)然后它将总结您的公式并将其 return sqrt 作为标准。