首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Presto中使用SUM函数的函数SUM()?

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

Stack Overflow用户
提问于 2019-04-10 17:32:07
回答 2查看 7.5K关注 0票数 1

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

代码语言:javascript
运行
复制
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”((当(来源= 'y')之后计数其他0端)),“sum”(当(来源= 'x')然后num_tasks其他0端))

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 18:00:58

我不知道你想做什么,但我认为以下更改可能会有所帮助:

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

把这一切结合在一起:

代码语言:javascript
运行
复制
SELECT SUM(if(source in ('x', 'y'), num_tasks, 0))

或者,您可以将SUMFILTER语法结合使用:

代码语言:javascript
运行
复制
SELECT SUM(num_tasks) filter (where source in ('x', 'y'))
票数 3
EN

Stack Overflow用户

发布于 2022-05-15 22:27:24

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

代码语言:javascript
运行
复制
SELECT SUM(if(source in ('x', 'y'), num_tasks, 0))

过滤就像

代码语言:javascript
运行
复制
SELECT SUM(num_tasks) filter (where source in ('x', 'y'))

甚至可以组合在一起。我为什么要用这个?想象一下,您在prod中遇到了一个问题,并且有一台机器用错误的因子(例如1000倍)编写了数据。任何大于1000的价格,但只适用于源'x‘或'y’。

这可以由

代码语言:javascript
运行
复制
SELECT sum(if(price >= 1000000, price/1000, price)),0) 
filter (where source in ('x', 'y')) as revenue

所以我会使用条件IF语句,如果它是关于操作度量本身,过滤如果它是关于要处理的输入记录。这样,您将保持打开状态,以便将其他处理添加到顶部,并在以后进行最小的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55618336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档