दिलचस्प पोस्ट
रिसाइकिलवेव एडेप्टर संलग्न नहीं; लेआउट लंघन सभी शाखाओं को खींचने और पुश करने के लिए git सेट करें मेरी स्क्रिप्ट एसक्यूआरएल यूआरएल क्या है? एंड्रॉइड: स्लाइडिंग ड्रॉवर की ऊंचाई wrap_content के साथ सेट की जा सकती है? लिंक से स्थानीय फ़ोल्डर खोलें MySQL में विदेशी कुंजी की मूल बातें? सी # का उपयोग करके मेरी स्ट्रिंग मैच करने के लिए मैं कॉम्बो बॉक्स में चुने गए आइटम को कैसे सेट करूं? मोंगो डीबी / मोंगोज: अनूठे यदि नल नहीं है स्ट्रट्र बनाम str_replace का उपयोग कब करना है? मैं मोंगॉडब पर केस-असंवेदनशील प्रश्न कैसे कर सकता हूं? PHP कर्ल और HTTPS जावास्क्रिप्ट की तिथि को सी # अजाक्स द्वारा कैसे tweepy मॉड्यूल के लिए एक स्थान फ़िल्टर जोड़ने के लिए सीएसएस का प्रयोग करके घुमावदार किनारे षट्भुज कैसे बनायें स्ट्रिंग में प्रत्येक शब्द के पहले अक्षर को कैपिटल कैसे करें

क्या आप mysql में WHERE खंड में एक उपनाम का उपयोग कर सकते हैं?

मुझे WHERE खंड में एक उपनाम का उपयोग करने की आवश्यकता है, लेकिन यह मुझे बताता है कि इसकी एक अज्ञात कॉलम है। क्या इस मुद्दे को पाने के लिए कोई तरीका है? मुझे ऐसे अभिलेख चुनने की ज़रूरत है जिनके पास एक्स से अधिक रेटिंग है। रेटिंग की गणना निम्न उपनाम के रूप में की जाती है:

sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating 

वेब के समाधान से एकत्रित समाधान "क्या आप mysql में WHERE खंड में एक उपनाम का उपयोग कर सकते हैं?"

आप एक HAVING खंड का उपयोग कर सकते हैं, जो उपनाम देख सकते हैं, उदा

  HAVING avg_rating>5 

लेकिन जहां एक खंड में आपको अपनी अभिव्यक्ति को दोहराने की आवश्यकता होगी, उदा

  WHERE (sum(reviews.rev_rating)/count(reviews.rev_id))>5 

परंतु! सभी अभिव्यक्तियों की अनुमति नहीं दी जाएगी – एक समेकन समारोह का उपयोग करना जैसे SUM काम नहीं करेगा, इस स्थिति में आपको एक HAVING खंड का उपयोग करने की आवश्यकता होगी।

MySQL मैनुअल से :

यह एक WHERE खंड में एक स्तंभ उपनाम को संदर्भित करने के लिए स्वीकार्य नहीं है, क्योंकि स्तंभ मान को अभी तक निर्धारित नहीं किया जा सकता है जब WHERE खंड निष्पादित किया जाता है। अनुभाग B.1.5.4, "कॉलम उपायों के साथ समस्याएं" देखें।

अगर यह mysql में काम करता है लेकिन sqlserver का उपयोग करते हैं तो आप यह भी इसे लपेट कर सकते हैं:

 select * from ( -- your original query select .. sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating from ...) Foo where Foo.avg_rating ... 

यह सवाल काफी पुराना है और एक उत्तर पहले ही 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 

दूसरी ओर संभव है और एसक्यूएल मानक के अनुरूप है। जहाँ तक

 HAVING avg_rating > 10 

केवल MySQL में संभव है मानक के अनुसार यह मान्य एसक्यूएल नहीं है, क्योंकि SELECT खंड को HAVING बाद निष्पादित किया जाना चाहिए। MySQL दस्तावेज़ से:

मानक एसक्यूएल के लिए एक और MySQL एक्सटेंशन चयन सूची में उपनाम अभिव्यक्ति के लिए HAVING खंड में संदर्भों को परमिट देता है।

MySQL एक्सटेंशन एकत्रित कॉलम के लिए HAVING खंड में उपनाम के उपयोग की अनुमति देता है

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

यह आपकी क्वेरी स्थैतिक है, आप इसे एक दृश्य के रूप में परिभाषित कर सकते हैं, तब आप उस उपनाम का उपयोग जहां दृश्य पूछते समय क्लॉज में कर सकते हैं।