شبكة تعلم مع ناو

ما الفرق بين WHERE وHAVING عند تجميع البيانات؟

تحدد WHERE الصفوف التي تدخل في التجميع، بينما تحدد HAVING المجموعات التي تظهر بعد حساب نتائج التجميع. هذا الفرق يؤثر في معنى الأعداد والمجاميع النهائية. إذا استبعدنا الكتب القصيرة باستخدام WHERE، فإن COUNT داخل كل تصنيف سيحسب الكتب المتبقية فقط، وليس جميع الكتب التي كانت موجودة في ذلك التصنيف.

بعد تكوين المجموعات باستخدام GROUP BY، يمكن كتابة شرط مثل HAVING COUNT(*) > 1 للاحتفاظ بالمجموعات التي تضم أكثر من صف. من الأخطاء الشائعة حساب عدد الصفوف قبل تطبيق WHERE عند توقع النتيجة. لتتبع الاستعلام، ابدأ بتحديد الصفوف المقبولة، ثم وزعها على المجموعات، ثم احسب الدالة لكل مجموعة، وأخيرًا اختبر شرط HAVING. هذا التسلسل يوضح دور كل جزء دون الخلط بين تصفية السجلات وتصفية ملخصاتها.

مثال

CREATE TABLE books_having_example (category VARCHAR(20), pages INT);
INSERT INTO books_having_example VALUES ('SQL', 80), ('SQL', 150), ('Web', 140), ('Web', 180);
SELECT category, COUNT(*) AS total FROM books_having_example
WHERE pages > 100 GROUP BY category HAVING COUNT(*) > 1;

باختصار: WHERE تصفي الصفوف قبل التجميع، وHAVING تصفي المجموعات بناءً على نتائجها.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.