如何在 Presto SQL 中的 SUM 函数中使用函数 SUM()

  • 本文关键字:函数 SUM Presto SQL 中的 presto
  • 更新时间 :
  • 英文 :


我试图通过以下逻辑获取两个数字的总和:x = y + j基于这个逻辑,我使用 SUM(( 函数编写了 presto 查询,以获得 x 和 y 的总和,但我得到了 Presto 语法错误

SELECT
 SUM(sum(CASE
        WHEN source = 'x' THEN num_tasks
        ELSE 0 
    END) + sum(CASE WHEN source = 'y' THEN num_tasks ELSE 0  END)) as total

错误通知Presto 查询失败。错误: SYNTAX_ERROR:无法在聚合中嵌套聚合 "sum": ["sum"((CASE WHEN (source = 'y'( THEN COUNT ELSE 0 END((, "sum"((CASE WHEN (source = 'x'( THEN num_tasks ELSE 0 END((]]<</p>

div class="one_answers"> 我

不确定我是否理解您要做什么,但我认为以下更改可能会有所帮助:

  • CASE WHEN 中使用 IN 语句:source in ('x', 'y')
  • 使用IF而不是CASEif(source in ('x', 'y'), num_tasks, 0)
  • 我相信你只需要一个SUM电话。

把这一切放在一起:

SELECT SUM(if(source in ('x', 'y'), num_tasks, 0))

或者,您可以将SUMFILTER语法一起使用:

SELECT SUM(num_tasks) filter (where source in ('x', 'y'))

作为@Dain Sundstrom 答案的补充:使用条件求和

SELECT SUM(if(source in ('x', 'y'), num_tasks, 0))

和过滤喜欢

SELECT SUM(num_tasks) filter (where source in ('x', 'y'))

甚至可以组合。我为什么要使用它?想象一下,您在生产中遇到了问题,一台机器确实以错误的因子(例如 1000x(写入了数据。任何大于 1000 的价格,但仅适用于源"x"或"y"。

这可以通过以下方式解决

SELECT sum(if(price >= 1000000, price/1000, price)),0) 
filter (where source in ('x', 'y')) as revenue

因此,如果它是关于操作指标本身并过滤它与要处理的输入记录有关,我会使用条件 IF 语句。通过这种方式,您可以保持开放状态,可以在以后添加其他处理,并进行最少的更改。

最新更新