SELECT CASE WHEN avg(count)>12 THEN 5
WHEN avg(count)>8 THEN 4
WHEN avg(count)>2 THEN 3
WHEN avg(count)>1 THEN 2
ELSE 1
END,madeby
FROM (SELECT M.month,(SELECT count(*)
FROM Booking
WHERE date_trunc('month',starttime)=month
AND madeby=M.madeby
) AS count,M.madeby
FROM (SELECT date_trunc('month',generate_series(min(starttime),
current_timestamp,interval '1 month')::timestamp)
AS month,madeby
FROM Booking
GROUP BY madeby
) AS M
) AS BookingsPerMonth
GROUP BY madeby;
现在我需要在那里进行计算,我不质疑这一点。我猜问题是它计算了聚合函数 avg 四次。时间差异从使用 CASE 的 ~17 秒到没有的 ~4.5 秒(尽管我当时缺乏足够的信息)
有没有办法通过可变存储或其他方式来优化这一点,例如使时间接近 4.5 秒?