我试图通过以下逻辑得到两个数字的和: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”((当(来源= 'y')之后计数其他0端)),“sum”(当(来源= 'x')然后num_tasks其他0端))
发布于 2019-04-10 18:00:58
发布于 2022-05-15 22:27:24
作为@Dain Sundstrom答案的补充:使用条件求和
SELECT SUM(if(source in ('x', 'y'), num_tasks, 0))
过滤就像
SELECT SUM(num_tasks) filter (where source in ('x', 'y'))
甚至可以组合在一起。我为什么要用这个?想象一下,您在prod中遇到了一个问题,并且有一台机器用错误的因子(例如1000倍)编写了数据。任何大于1000的价格,但只适用于源'x‘或'y’。
这可以由
SELECT sum(if(price >= 1000000, price/1000, price)),0)
filter (where source in ('x', 'y')) as revenue
所以我会使用条件IF语句,如果它是关于操作度量本身,过滤如果它是关于要处理的输入记录。这样,您将保持打开状态,以便将其他处理添加到顶部,并在以后进行最小的更改。
https://stackoverflow.com/questions/55618336
复制相似问题