TL; DR
有没有办法在算术运算中使用聚合结果?如何将算术运算应用于MySQL中的聚合列?
详细
我要带两个聚合列(SUM(..)
,COUNT(..)
)一起操作它们,例如:
-- doesn't work
SELECT
SUM(x) AS x,
COUNT(y) AS y,
(x/y) AS x_per_y -- Problem HERE
FROM
my_tab
GROUP BY groupable_col;
这并不工作,但我发现这样做:
SELECT
SUM(x) AS x,
COUNT(y) AS y,
SUM(x)/COUNT(y) AS x_per_y -- notice the repeated aggregate
FROM
my_tab
GROUP BY groupable_col;
但是,如果我需要一台运行聚集许多列,它很快变得非常重复,我不知道如何告诉与否的MySQL可以进行优化,以便我不计算多次聚合。
我搜索SO,有一段时间了,也问了一些专业人士,最好的替代,我可以拿出嵌套选择,其中~~我的数据库不支持。~~
编辑:它做支持他们,我已经做错了什么,而排除了嵌套选择过早
此外,MySQL的文件似乎支持它,但我不能让这样的事情工作(例如在链接的最底部)
https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html
你可以使用一个触发器来存储计算的值,但在这种情况下,你可能会得到比编写多次聚合更多的开销.AFAIK,mysql再次运行相同的操作,以便值被回收(每个查询) – Mihai