使用子查询重复计算
Duplicated calculation using subquery
我正在尝试重现以下计算:
((final_value - init_value) / init_value) * 100
虽然我得到了正确的值,但我想问一下是否有更好的方法来做到这一点?至少,避免同一个子查询两次 (init_value)
SELECT (
(SELECT SUM(x)
FROM event
WHERE "year" = 2020)
-
(SELECT SUM(x)
FROM event
WHERE "year" = 2000))
/
(SELECT SUM(x)
FROM event
WHERE "year" = 2000)::FLOAT
* 100
可能有一个最佳的 Postgresql-specific 方法,但通常您可以使用条件 case 表达式,例如:
select (Sum(case when "year" = 2020 then x end) - Sum(case when "year" = 2000 then x end))
/ Sum(case when "year" = 2000 then x end)::float * 100
from event
where "year" in (2000,2020);
我正在尝试重现以下计算:
((final_value - init_value) / init_value) * 100
虽然我得到了正确的值,但我想问一下是否有更好的方法来做到这一点?至少,避免同一个子查询两次 (init_value)
SELECT (
(SELECT SUM(x)
FROM event
WHERE "year" = 2020)
-
(SELECT SUM(x)
FROM event
WHERE "year" = 2000))
/
(SELECT SUM(x)
FROM event
WHERE "year" = 2000)::FLOAT
* 100
可能有一个最佳的 Postgresql-specific 方法,但通常您可以使用条件 case 表达式,例如:
select (Sum(case when "year" = 2020 then x end) - Sum(case when "year" = 2000 then x end))
/ Sum(case when "year" = 2000 then x end)::float * 100
from event
where "year" in (2000,2020);