想问下Hologres有支持下面这种语法吗?现在我这样写 , sumB 里的 sumA不能识别 , 还要把case when重复再写一遍
select sum(
CASE WHEN a_column = '1' THEN b_column
WHEN a_column IN('2','3') THEN c_column
END
) as sumA ,
sumA / 1000 as sumB
from xxx
group by xxx
在Hologres中,你可以使用子查询或者公共表达式(Common Table Expression,CTE)来实现你需要的逻辑。以下是一个可能的解决方案:
WITH cte AS (
SELECT
CASE WHEN a_column = '1' THEN b_column
WHEN a_column IN ('2', '3') THEN c_column
END AS sumA
FROM your_table
)
SELECT SUM(sumA) FROM cte;
在这个例子中,我们首先在一个CTE中计算出sumA
,然后在主查询中计算sumA
的总和。这样,我们就可以在Hologres中实现你需要的逻辑了。
Hologres 支持这种语法,但是需要将 CASE WHEN 语句放在聚合函数之前。
SELECT
SUM(CASE WHEN a_column = '1' THEN b_column
WHEN a_column IN('2','3') THEN c_column
ELSE 0
END) as sumA,
sumA / 1000 as sumB
FROM xxx
GROUP BY xxx;
文档 在指定的条件表达式为TRUE时执行一组单个或多个语句。https://help.aliyun.com/zh/hologres/user-guide/conditional-functions?spm=a2c4g.11186623.0.i54
Hologres支持使用CASE表达式来进行条件计算,但是在你的查询中,你尝试在另一个CASE表达式(sumA / 1000 as sumB
)中引用之前定义的别名(sumA
)。SQL标准并不允许直接这样引用别名。你需要将整个CASE表达式再次复制并进行除法运算。
以下是一个示例,展示了如何在不重复编写完整CASE表达式的情况下完成这个操作:
SELECT
CASE WHEN a_column = '1' THEN b_column
WHEN a_column IN('2','3') THEN c_column
END AS sumA,
(
CASE WHEN a_column = '1' THEN b_column
WHEN a_column IN('2','3') THEN c_column
END
) / 1000.0 AS sumB
FROM your_table;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975