/ / मेरे sql "समूह द्वारा" और "होने" कथन में क्या गलत है? - sql, oracle10g, oracle-xe

मेरे एसक्यूएल "ग्रुप बाय" और "होने" कथन के साथ क्या गलत है? - एसक्यूएल, oracle10g, oracle-xe

मुझे यह कहते हुए एक त्रुटि हो रही है कि यह अभिव्यक्ति का समूह नहीं है जब मैं इस कथन को oracle XE में चलाता हूं।

SELECT PROJECTID, HOURSWORKED FROM ASSIGNMENT GROUP BY PROJECTID HAVING HOURSWORKED > 20;

तालिका: सहायता

उत्तर:

जवाब के लिए 0 № 1

GROUP BY एग्रीगेटिंग एक्सप्रेशन के लिए उपयोग किया जाता है, जैसे कि MAX() या SUM().


जवाब के लिए 0 № 2

आप या तो लिख सकते हैं

SELECT PROJECTID, HOURSWORKED
FROM ASSIGNMENT
WHERE HOURSWORKED > 20;

या

SELECT PROJECTID, SUM(HOURSWORKED)
FROM ASSIGNMENT
GROUP BY PROJECTID
HAVING SUM(HOURSWORKED) > 20;

(या कुछ अन्य कुल कार्य, उदाहरण: MAX, MIN) आपके इरादे पर निर्भर करता है।

WHERE व्यक्तिगत रिकॉर्ड को फ़िल्टर करने के लिए उपयोग किया जाता है

HAVING समूहीकृत कुल मूल्यों को फ़िल्टर करने के लिए उपयोग किया जाता है।


जवाब के लिए 0 № 3

आपके पास घंटे के आधार पर एक कुल कार्य होना चाहिए - उदा। MAX (HOURSWORKED), AVERAGE (HOURSWORKED) आदि या आपको इसे समूह में जोड़ना होगा, हालाँकि यह अजीब लगेगा।

स्टैकओवरफ्लो पर एसक्यूएल प्रश्न पूछने के लिए एक अन्य सुझाव - एसक्यूएल फिडेल का उपयोग करके न्यूनतम परीक्षण केस बनाएं। जैसे http://sqlfiddle.com/#!17/fea91/5 अपने उदाहरण के लिए। जब तक यह बहुत ओरेकल विशिष्ट नहीं है, पोस्टग्रेज आम तौर पर साधारण एसक्यूएल प्रश्नों के लिए पर्याप्त है। दोनों के बीच अंतर देखने के लिए WHERE को एक HAVING में बदलने का प्रयास करें ...