【发布时间】:2021-10-27 01:42:18
【问题描述】:
我有以下 Presto 2 个表格,一个按客户和日期存储预算信息,另一个按客户和日期存储支出信息
select day, client_id, budget_id, budget_period, budget_amount
from budget_table
| day | client_id | budget_id | budget_period | budget_amount |
|---|---|---|---|---|
| 2021-02-27 | 1 | 1-1 | daily | 10 |
| 2021-02-28 | 1 | 1-1 | daily | 10 |
| 2021-03-01 | 1 | 1-1 | daily | 10 |
| 2021-03-02 | 1 | 1-1 | daily | 10 |
| 2021-03-03 | 1 | 1-1 | daily | 10 |
| 2021-03-04 | 1 | 1-2 | monthly | 500 |
| 2021-03-05 | 1 | 1-2 | monthly | 500 |
| 2021-03-06 | 1 | 1-2 | monthly | 500 |
| 2021-02-27 | 2 | 2-1 | monthly | 400 |
| 2021-02-28 | 2 | 2-1 | monthly | 400 |
| 2021-03-01 | 2 | 2-1 | monthly | 400 |
| 2021-03-02 | 2 | 2-1 | monthly | 400 |
| 2021-03-03 | 2 | 2-2 | one_time | 1000 |
| 2021-03-04 | 2 | 2-2 | one_time | 1000 |
| 2021-03-05 | 2 | 2-2 | one_time | 1000 |
| 2021-03-06 | 2 | 2-2 | one_time | 1000 |
select day, client_id, spend
from spend_table
| day | client_id | spend |
|---|---|---|
| 2021-02-27 | 1 | 8 |
| 2021-02-28 | 1 | 9 |
| 2021-03-01 | 1 | 10 |
| 2021-03-02 | 1 | 7 |
| 2021-03-03 | 1 | 6 |
| 2021-03-04 | 1 | 16 |
| 2021-03-05 | 1 | 19 |
| 2021-03-06 | 1 | 18 |
| 2021-02-27 | 2 | 13 |
| 2021-02-28 | 2 | 15 |
| 2021-03-01 | 2 | 14 |
| 2021-03-02 | 2 | 15 |
| 2021-03-03 | 2 | 20 |
| 2021-03-04 | 2 | 25 |
| 2021-03-05 | 2 | 18 |
| 2021-03-06 | 2 | 27 |
以下是所需的输出:
| day | client_id | budget_id | budget_period | budget_amount | spend | spend_over_period |
|---|---|---|---|---|---|---|
| 2021-02-27 | 1 | 1-1 | daily | 10 | 8 | 8 |
| 2021-02-28 | 1 | 1-1 | daily | 10 | 9 | 9 |
| 2021-03-01 | 1 | 1-1 | daily | 10 | 10 | 10 |
| 2021-03-02 | 1 | 1-1 | daily | 10 | 7 | 7 |
| 2021-03-03 | 1 | 1-1 | daily | 10 | 6 | 6 |
| 2021-03-04 | 1 | 1-2 | monthly | 500 | 16 | 16 |
| 2021-03-05 | 1 | 1-2 | monthly | 500 | 19 | 35 |
| 2021-03-06 | 1 | 1-2 | monthly | 500 | 18 | 53 |
| 2021-02-27 | 2 | 2-1 | monthly | 400 | 13 | 13 |
| 2021-02-28 | 2 | 2-1 | monthly | 400 | 15 | 28 |
| 2021-03-01 | 2 | 2-1 | monthly | 400 | 14 | 14 |
| 2021-03-02 | 2 | 2-1 | monthly | 400 | 15 | 29 |
| 2021-03-03 | 2 | 2-2 | one_time | 1000 | 20 | 20 |
| 2021-03-04 | 2 | 2-2 | one_time | 1000 | 25 | 45 |
| 2021-03-05 | 2 | 2-2 | one_time | 1000 | 18 | 63 |
| 2021-03-06 | 2 | 2-2 | one_time | 1000 | 27 | 90 |
我试过了
select s.day,
s.client_id,
b.budget_id,
b.budget_period,
b.budget_amount,
s.spend,
case when b.budget_period = 'daily' then s.spend
when b.budget_period = 'monthly' then sum(s.spend) over (partition by b.budget_id, month(date(s.day)))
when as spend_over_period = 'one_time' then sum(s.spend) over (partition by b.budget_id)
end as budget_over_period
from spend_table as s
join budget_table as b
on s.day = b.day
and s.client_id = b.client_id
group by 1,2,3,4,5,6
但是,我收到 u'EXPRESSION_NOT_AGGREGATE' 错误。 有人知道如何在 Presto 中查询以获得所需的输出吗?
【问题讨论】: