यह प्रश्न काफी पुराना है और एक उत्तर में पहले से ही 160 मत प्राप्त हुए हैं ...
फिर भी मैं यह स्पष्ट कर दूंगा: प्रश्न वास्तव में इस बारे में नहीं है कि क्या उपनाम में अन्य नामों का उपयोग किया जा सकता है WHERE
।
sum(reviews.rev_rating) / count(reviews.rev_id) as avg_rating
एक एकत्रीकरण है। WHERE
क्लॉज में हम उन रिकॉर्ड को रोकते हैं जो हम उनके मूल्यों को देखकर तालिकाओं से चाहते हैं। sum(reviews.rev_rating)
और count(reviews.rev_id)
, हालांकि, वे मूल्य नहीं हैं जिन्हें हम रिकॉर्ड में पाते हैं; वे वे मूल्य हैं जो हमें केवल अभिलेख एकत्र करने के बाद मिलते हैं।
तो WHERE
अनुचित है। हमें जरूरत है HAVING
, क्योंकि हम एकत्रीकरण के बाद परिणाम पंक्तियों को प्रतिबंधित करना चाहते हैं। यह नहीं हो सकता
WHERE avg_rating > 10
न
WHERE sum(reviews.rev_rating) / count(reviews.rev_id) > 10
अत।
HAVING sum(reviews.rev_rating) / count(reviews.rev_id) > 10
दूसरी ओर संभव है और SQL मानक का अनुपालन करता है। जहाँ तक
HAVING avg_rating > 10
केवल MySQL में संभव है। यह मानक के अनुसार मान्य SQL नहीं है, क्योंकि SELECT
क्लॉज़ के बाद निष्पादित होने वाला है HAVING
। MySQL डॉक्स से:
मानक SQL में एक और MySQL एक्सटेंशन चयन सूची में अन्य अभिव्यक्तियों को HAVING क्लॉज में संदर्भों की अनुमति देता है।
MySQL एक्सटेंशन एकत्रित कॉलम के लिए HAVING क्लॉज में एक अन्य नाम के उपयोग की अनुमति देता है
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html