我有一个类似这样的专栏:
CASE
WHEN col1 > col2 THEN SUM(col3*col4)
ELSE 0
END AS some_product
我想把它放在我的GROUP BY子句中,但这似乎会引起问题,因为列中有一个聚合函数.在这种情况下,有没有办法按列别名(如some_product
)分组,或者我需要将其放入子查询中并对其分组?
我有一个类似这样的专栏:
CASE
WHEN col1 > col2 THEN SUM(col3*col4)
ELSE 0
END AS some_product
我想把它放在我的GROUP BY子句中,但这似乎会引起问题,因为列中有一个聚合函数.在这种情况下,有没有办法按列别名(如some_product
)分组,或者我需要将其放入子查询中并对其分组?
我猜你并不是真的想买一些产品.
answer to:"在这种情况下,是否有办法将某个列别名(例如某个_产品)设置为GROUP BY
,或者我需要将其放入子查询并对其进行分组?"is:不能使用列别名.
指定列别名的SELECT
子句直到GROUP BY
子句之后才被处理.可以使用内联视图或公共表表达式(CTE)对结果进行分组.
内联视图:
select ...
from (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
from ...
group by col1, col2 ... ) T
group by some_product ...
CTE:
with T as (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
from ...
group by col1, col2 ... )
select ...
from T
group by some_product ...