يمكنك استخدام اسم مستعار في جملة WHERE في الخلية ؟
-
03-07-2019 - |
سؤال
أنا بحاجة إلى استخدام اسم مستعار في جملة WHERE, لكنه يقول لي أنه غير معروف العمود.هل هناك أي طريقة للحصول على حول هذه المسألة ؟ كنت بحاجة إلى تحديد السجلات التي تحتوي على تصنيف أعلى من x.تصنيف ويحسب كما يلي الاسم المستعار:
sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating
المحلول
هل يمكن استخدام وجود الشرط ، يمكن انظر الأسماء المستعارة مثل
HAVING avg_rating>5
ولكن في جملة where سوف تحتاج إلى تكرار التعبير الخاص بك, على سبيل المثال
WHERE (sum(reviews.rev_rating)/count(reviews.rev_id))>5
ولكن!ليس كل التعبيرات سيتم السماح باستخدام وحدة تجميع وظيفة مثل المبلغ لن يعمل في هذه الحالة سوف تحتاج إلى استخدام وجود الشرط.
من دليل الخلية:
فمن غير المسموح به إلى الرجوع إلى عمود الاسم المستعار في جملة WHERE ، لأن قيمة العمود قد لا بعد يتم تحديدها عند جملة WHERE يتم تنفيذ.انظر القسم باء-1.5.4, "مشاكل مع العمود الأسماء المستعارة".
نصائح أخرى
لا أعرف إذا كان هذا يعمل في الخلية ولكن باستخدام 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
من ناحية أخرى من الممكن يتوافق مع SQL القياسية.في حين
HAVING avg_rating > 10
هو ممكن فقط في الخلية.لم يصح SQL وفقا لمعيار ، SELECT
الشرط المفترض أن تحصل على تنفيذها بعد HAVING
.من الخلية مستندات:
آخر الخلية امتداد SQL القياسية تصاريح المراجع في وجود شرط أن مستعارة التعبير في اختيار القائمة.
الخلية تمديد تصاريح استخدام اسم مستعار في وجود بند المجمعة العمود
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
إذا كان الاستعلام الخاص بك هو ثابت ، يمكنك أن تعرف على أنها عرض ثم يمكنك استخدام هذا الاسم المستعار في جملة where في حين الاستعلام عن الرأي.