次のようなクエリがある場合
SELECT date_trunc('day', assigndate)e,
count(CASE WHEN a.assigneeid = 65548
AND a.assigneeid IN
(SELECT userid
FROM groupmembers
WHERE groupid = 65553) THEN 1 ELSE NULL END) assigned,
count(CASE WHEN a.assigneeid = 65548
AND a.completedtime IS NOT NULL
AND a.assigneeid IN
(SELECT userid
FROM groupmembers
WHERE groupid = 65553) THEN 1 ELSE NULL END) completed
FROM ASSIGNMENT a
WHERE assigndate > CURRENT_TIMESTAMP - interval '20 days'
GROUP BY date_trunc('day',assigndate);
問題のサブクエリは
SELECT userid
FROM groupmembers
WHERE groupid = 65553
サブクエリはnot co-related
親クエリに対するものであるため、一度だけ実行され、キャッシュされた結果が使用されます。ただし、サブクエリはクエリ内の 2 つの場所に存在するため、 に従って、2 回SQL plan
評価されます。そのサブクエリの結果を取得し、両方の場所で使用する方法はありますか?cache
結合する単一のフィールドがないため、サブクエリを結合に変換することはできません (カウントが正しくなくなるため、無条件の結合にすることはできません)。