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;
今、私はそこでその計算を行う必要があります、私はそれを疑っていません。問題は、集計関数を平均4回計算していることだと思います。時間の違いは、CASEを使用した場合の約17秒から、使用しない場合の約4.5秒までです(ただし、十分な情報が不足しています)
時間を4.5秒に近づけるなど、可変ストレージなどを使用してこれを最適化する方法はありますか?