يمكنك استخدام اسم مستعار في جملة WHERE في الخلية ؟

StackOverflow https://stackoverflow.com/questions/200200

سؤال

أنا بحاجة إلى استخدام اسم مستعار في جملة 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 في حين الاستعلام عن الرأي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top