【发布时间】:2023-02-26 00:06:51
【问题描述】:
如何使用 type = 'A' 等条件修改以下 CASE 表达式,并创建一般因子为 1.5 的 2023 年估计值?
请参阅fiddle 以供参考。 我的数据表如下:
|id |transaction_date |cost |type|
|1 |2019-01-01 |94.12 |A |
|2 |2019-02-15 |95.01 |A |
|5 |2020-03-01 |36.22 |A |
|3 |2020-05-16 |45.22 |B |
|4 |2020-06-10 |10.84 |A |
|6 |2020-12-09 |12.42 |A |
|8 |2021-02-28 |72.44 |B |
|9 |2021-04-16 |91.08 |A |
|7 |2021-05-16 |64.88 |A |
|12 |2022-01-22 |55.87 |B |
|13 |2022-04-06 |99.66 |A |
|10 |2022-06-09 |53.34 |A |
|11 |2022-10-05 |36.93 |A |
|14 |2022-11-18 |90.04 |A |
|15 |2023-01-23 |82.30 |A |
此 SQL 查询确实指定 type = 'A' 并对 'A' 列求和 但不包含 2023 年的估计。
select EXTRACT(YEAR FROM item_.transaction_date) AS year,
sum(case when EXTRACT(YEAR FROM CURRENT_DATE)>EXTRACT(YEAR FROM item_.transaction_date) AND type = 'A'
then item_.cost
else 0 end)
as box_A
from item_
GROUP BY year
order by year;
|year| box_a |
|2019| 189.13|
|2020| 59.48 |
|2021| 155.96|
|2022| 279.97|
|2023| 0 |
以下 SQL 查询确实包含 2023 年的估计值,但没有条件,因此未指定类型 = 'A',因此 box_a 中的 * 包含错误的值。
select EXTRACT(YEAR FROM item_.transaction_date) AS year,
CASE WHEN EXTRACT(YEAR FROM item_.transaction_date) < date_part('year', CURRENT_DATE)
THEN sum( item_.cost )
ELSE (SELECT sum( item_.cost) FROM item_ WHERE EXTRACT(YEAR FROM item_.transaction_date) = date_part('year', CURRENT_DATE - INTERVAL '1 year')
) * 1.5
END
as box_a
from item_
GROUP BY year
Order by year;
|year| box_a |
|2019| 189.13 |
|2020| *104.70*|
|2021| *228.40*|
|2022| *335.84*|
|2023| *503.76*|
这就是我想要的
|year| box_a |
|2019| 189.13|
|2020| 59.48 |
|2021| 155.96|
|2022| 279.97|
|2023| 419.96| |
这个 stackoverflow solution 很适合用于 WITHOUT 条件。
【问题讨论】:
标签: sql postgresql