开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

想问下Hologres有支持下面这种语法吗?

想问下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

展开
收起
真的很搞笑 2023-12-01 11:35:32 80 0
3 条回答
写回答
取消 提交回答
  • 在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中实现你需要的逻辑了。

    2023-12-02 15:22:09
    赞同 展开评论 打赏
  • 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

    2023-12-02 10:16:38
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    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;
    
    2023-12-01 16:03:44
    赞同 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关产品

  • 实时数仓 Hologres
  • 相关电子书

    更多
    实时数仓Workshop(广州站)- 李佳林 立即下载
    阿里云实时数仓Hologres技术揭秘2.0 立即下载
    实时数仓Hologres技术实战一本通2.0版(下) 立即下载