使用子查询重复计算

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);