سؤال

لذلك عادة يمكنك فقط القيام به

SELECT COUNT(field.id) FROM table WHERE field.id > 100

وسيقوم Count (الحقل) بإرجاع عدد الإدخالات التي تحتوي على معيار Field.id> 100

ولكن ماذا لو كنت تعتبر الإدخالات المحددة مع معيار مثل

SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100

الكود لن يعمل في هذه الحالة ....

كيف يمكنني حساب الإدخالات التي يتم تحديد معيارها من خلال جملة وجود؟

شكرا مقدما

هل كانت مفيدة؟

المحلول

نحن سوف، COUNT يعمل قبل HAVING يتم تطبيقه على مجموعة النتائج. لذلك إذا كنت بحاجة إلى حساب رقمها - فيجب عليك لف استعلامك مع آخر.

SELECT COUNT(*) FROM (
    SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)

نصائح أخرى

لا يمكنني تشغيل أي من الاستعلام كما هو - يعطونني خطأ 1140 لـ "استخدام مجمعة بدون مجموعة حسب جملة" (أي: COUNT(field.id)). يبدو أن كل شيء لا يرتبط بالجريئة على الإطلاق ، فقط القدرة على الرجوع إلى الاسم المستعار للعمود للمقارنة ...

الوسائل الأكثر دعمًا على نطاق واسع هي:

SELECT field.id * 10 AS foo 
  FROM table 
 WHERE field.id * 10 > 100

MySQL لا تدعم الرجوع إلى اسم مستعار للعمود في GROUP BY أو HAVING بند. لا يتطلب ذلك استخدام backticks ، لكنني رأيت حالات لن تنجح (كلمات غير محفوظة) حتى كانت الظهر الحاضر:

SELECT field.id * 10 AS foo 
  FROM table 
HAVING `foo` > 100

لا أوصي بهذا النهج - إنه مدعوم على SQL Server ، ولكن ليس Oracle ...

ال HAVING البند مثل WHERE البند ، الفرق هو أن HAVING يدعم البند الوظائف الإجمالية دون الحاجة إلى لفها في مسافة فرعية.

إخلاء المسئولية - لقد اختبرت هذا فقط على SQL Server

في هذه الحالة ، لن يؤدي إلا إلى أي استفسارات إجمالية على المجموعة التي تم إرجاعها بالكامل. بادئ ذي بدء ، لا يمكنك الجري

SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100

لأن Field.ID غير موجود في جملة تحدد مجموعة أو وظيفة إجمالية ؛ انها فقط لا تجمع.

مع ذلك ، SQL التالي -

SELECT COUNT(field.id) FROM table HAVING COUNT(field.id) > 100

سيعود عدد الصفوف في الطاولة إذا العد أكبر من 100. إذا لم يكن الأمر كذلك ، فلن تحصل على نتيجة.

هل لديك مشكلة محددة في الاعتبار؟ ماذا تحاول الاعتماد؟

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