TL;DR
在算术运算中有使用聚合结果的方法吗?
详细信息
我想使用两个聚合列(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是否可以进行优化,从而避免多次计算聚合。
我已经搜索了很长一段时间,并询问了一些专业人士,我能想到的最好的选择是嵌套选择,而我的db不支持嵌套选择。
编辑:它确实支持它们,我做错了什么,过早地排除了嵌套的选择。
而且,MySQL文档似乎支持它,但我无法让类似的东西工作(例如在链接的底部)
https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html
发布于 2017-03-27 20:32:41
一种方法是使用子查询:
select x,
y,
x / y as x_per_y
from (
select SUM(x) as x,
COUNT(y) as y
from my_tab
group by groupable_col
) t还请注意,count(y)的值可以是零(当所有y都为空时)。MySQL自动处理这种情况,并在分母为零的情况下生成NULL。
在这种情况下,某些DBMSes抛出除以零错误,在这种情况下通常通过生成null来处理:
select x,
y,
case when y > 0 then x / y end as x_per_y
from (
select SUM(x) as x,
COUNT(y) as y
from my_tab
group by groupable_col
) thttps://stackoverflow.com/questions/43055851
复制相似问题