【发布时间】:2021-01-25 13:49:14
【问题描述】:
当我有多个组时,我需要为分子做这样的事情:
sum((x - avg(x)) * (y - avg(y)))
我希望内部 x - avg() 将为每个 x 执行减法。但事实证明我不能像这样在 MySQL 中这样做
select sum((x - avg(x)) * (y - avg(y))) numerator
from tbl t group by group_colk
这使组函数的使用无效。有 3 种方法可以解决这个问题。
- 以其他方式布局公式,使其不包含 2 个聚合函数。有时这很困难,因为我无法在网上轻松找到其他表格。
- 创建另一个计算内部聚合结果(本例中的平均值)的表。将它与另一个连接到外部(总和)。这种方式会让我加入另一个导致性能损失的表。
- 使用变量来存储结果。这将使我多次运行查询以获得结果。
有没有更好的方法来解决这个问题?尚未尝试子查询,但根据我过去的经验,子查询似乎比加入另一个表更损害性能。
【问题讨论】:
-
你明白了。你的乐观是错误的。
-
@P.Salmon 这是我使用的第三种方法。还不是我想要的。我已经这样做了,但是部署开销太大,所以我想要一个查询来完成工作..
-
@草莓哈哈。我经常使用 python,所以我认为这是一个常识。这个想法是,当我执行 x-avg(x) 时,我想要某种方法不会将组“折叠”成一行,而是在总结时执行。
-
'但是脚本的开销太大了。' - 怎么会这样?有代表性的样本数据和预期结果会有所帮助,尤其是对于那些在十年或四年内没有做过困难计算的人。
标签: mysql group-by aggregate-functions