এই প্রশ্নটি বেশ পুরানো এবং একটি উত্তর ইতিমধ্যে 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
শুধুমাত্র মাইএসকিউএলে সম্ভব। এটি স্ট্যান্ডার্ড অনুযায়ী বৈধ এসকিউএল নয়, কারণ SELECT
ধারাটি পরে কার্যকর হওয়ার কথা HAVING
। মাইএসকিউএল ডক্স থেকে:
স্ট্যান্ডার্ড এসকিউএল-এর আরও একটি মাইএসকিউএল এক্সটেনশান নির্বাচন তালিকার বিকল্পযুক্ত অভিব্যক্তির HAVING ধারাটিতে রেফারেন্সের অনুমতি দেয়।
মাইএসকিউএল এক্সটেনশন একত্রিত কলামের জন্য HAVING ধারাটিতে একটি উপনামের ব্যবহারের অনুমতি দেয়
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html