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 स्थानों पर मौजूद है, तो SQL plan
के अनुसार, इसका मूल्यांकन दो बार का मूल्यांकन किया जाता है। क्या उस सबक्वायरी के परिणाम cache
पर कोई रास्ता है और दोनों स्थानों पर इसका उपयोग करें?
सबक्वेरी एक में शामिल होने के रूप में कोई भी क्षेत्र है जिस पर शामिल होने के लिए है (और यह बिना शर्त नहीं किया जा सकता शामिल हो, के रूप में गिनती गलत तो हो जाएगा)
आपके पास एक अनावश्यक अभिव्यक्ति दिखाई देती है। "A.assigneeid = 65548" और "a.assigneeid में (subquery)" कहने वाला कोई खंड नहीं है - वे या तो दोनों सत्य हैं या दोनों झूठे हैं। – adhocgeek
यह केवल प्रदर्शन कारणों के लिए था (खराब तर्क, हालांकि!) – Daud