我有一个专栏,看起来像这样:
CASE
WHEN col1 > col2 THEN SUM(col3*col4)
ELSE 0
END AS some_product
我想把它放在我的GROUP BY子句中,但这似乎会引起问题,因为column中有一个聚合函数,在这种情况下,是否有一种方法可以GROUP BY一个列别名,例如some_product
,或者我需要把它放在一个子查询中,并对它进行分组?
我有一个专栏,看起来像这样:
CASE
WHEN col1 > col2 THEN SUM(col3*col4)
ELSE 0
END AS some_product
我想把它放在我的GROUP BY子句中,但这似乎会引起问题,因为column中有一个聚合函数,在这种情况下,是否有一种方法可以GROUP BY一个列别名,例如some_product
,或者我需要把它放在一个子查询中,并对它进行分组?
5条答案
按热度按时间jogvjijk1#
我的猜测是,您并不真的想
GROUP BY
some_product。**“是否有办法
GROUP BY
列别名,例如在本例中的some_product,或者我是否需要将其放在子查询中并对其进行分组?”**的答案是:**您不能GROUP BY
列别名。在
GROUP BY
子句之后才处理SELECT
子句(其中分配了列别名)。可以使用内联视图或公用表表达式(CTE)使结果可用于分组。内联视图:
热膨胀系数:
1u4esq0p2#
虽然Shannon's answer在技术上是正确的,但它看起来有些矫枉过正。
简单的解决方法是把求和放在
case
语句之外,这样就可以了:基本上,您的旧代码告诉SQL对每一行单独执行
sum(X*Y)
(使每一行都有自己的答案,不能分组)。我写的代码行取和积,这就是你想要的。
amrnrhlw3#
我认为答案很简单(除非我错过了什么?)
您可以将CASE语句逐字放在GROUP BY中(减去别名列名)
lzfw57am4#
如果你用其他的值来分组,那就不用你现有的值,
把它写成
如果你想要
group By
内部表达式,那么(col3*col4)
写入
group By
以匹配表达式w/oSUM
...最后,如果要按实际聚合分组
epggiuax5#
在SAS中,我可以在我的聚合表中对一个“case when”列进行GROUP BY。你所要做的就是把“GROUP BY calculated some_product”放在其中。只要把“calculated”和一个空格放在列名前就行了。对我来说很有效。