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

标签 mysql sql aggregate-functions

我正在尝试编写一个 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/

相关文章:

php - 运算符似乎在 Laravel 中不起作用

php - 使用 PostgreSQL 或 Mysql 的 SQL 查询进度

mysql - 将 MySQL 数据库表导出到多个文件并在 MySQL 数据库中导入巨大的数据集

sql - 使用SQL plus应该输入什么用户名和密码

java - H2 DB 与 datetime2

sql - 如何在联合查询中显示表名

sql - 难以定义分区的平均值

sql - 通过聚合函数中其他列的(第一个值)对不同的列值进行排序

javascript - Highcharts : Line Chart not Loading the data from Database on screen

sql - 计算Postgresql中的累计总数