【发布时间】:2021-10-19 13:32:44
【问题描述】:
我收到以下错误:
postgresql 错误:在“2020”或附近出现语法错误 第 2 行:... THEN amount * split_exchange_rate ELSE 0 END) AS 2020Q4_rev...
见下面的代码。我正在使用 postgresql
SELECT object_id
, SUM(CASE WHEN created::date >= '2020-10-01' AND created::date <= '2020-12-31' THEN amount * exchange_rate ELSE 0 END) AS 2020Q4_revenue
, SUM(CASE WHEN created::date >= '2021-01-01' AND created::date <= '2021-03-31' THEN amount * exchange_rate ELSE 0 END) AS 2021Q1_revenue
, SUM(CASE WHEN created::date >= '2021-04-01' AND created::date <= '2021-06-30' THEN amount * exchange_rate ELSE 0 END) AS 2021Q2_revenue
, SUM(CASE WHEN created::date >= '2021-07-01' AND created::date <= '2021-09-30' THEN amount * exchange_rate ELSE 0 END) AS 2021Q3_revenue
from raw_data.purchase_revenue pr
group by 1
【问题讨论】:
-
问题根本不在于条件,而在于
2020Q4_revenue不是有效标识符(用作列别名)。你need to quote it(如果你坚持使用那个名字)。 -
请注意,您也可以使用
filter()运算符进行条件聚合:sum(amount * exchange_rate) filter (where ...)我发现这样更易于阅读(但您仍然需要为列别名使用有效的 SQL 标识符)