كيف يمكنني حساب إدخالات MySQL بمعيار
-
04-10-2019 - |
سؤال
لذلك عادة يمكنك فقط القيام به
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. إذا لم يكن الأمر كذلك ، فلن تحصل على نتيجة.
هل لديك مشكلة محددة في الاعتبار؟ ماذا تحاول الاعتماد؟