ما الفرق بين COUNT(*) وCOUNT(column) داخل المجموعات؟

متقدمقراءة دقيقةآخر تحديث 2 أكتوبر 2026

SQL قواعد البيانات

الإجابة

تحسب COUNT(*) جميع صفوف المجموعة، بينما تحسب COUNT(column) الصفوف التي تحتوي على قيمة غير NULL في العمود المحدد. عندما يكون العمود اختياريًا، قد يختلف العددان داخل المجموعة نفسها. مثلًا، يمكن أن يحتوي تصنيف معين على ثلاثة كتب، لكن سعر كتابين فقط معروف، فيكون عدد الكتب ثلاثة وعدد الأسعار المعروفة اثنين.

هذا الفرق مهم عند استخدام HAVING لتصفية المجموعات. الشرط على COUNT(price) يختبر عدد الأسعار المعروفة، ولا يختبر العدد الإجمالي للكتب. وإذا كانت جميع الأسعار في مجموعة ما NULL، تبقى المجموعة موجودة، وتكون نتيجة COUNT(price) صفرًا. لا تُحذف المجموعة لمجرد غياب القيم في العمود المحسوب. اختيار صيغة العد الصحيحة يعتمد على ما إذا كان السؤال يتعلق بالسجلات نفسها أم بالمعلومات المتاحة داخلها.

مثال

CREATE TABLE books_known_example (category VARCHAR(20), price DECIMAL(5,2));
INSERT INTO books_known_example VALUES ('SQL', 10), ('SQL', NULL), ('Art', NULL);
SELECT category, COUNT(*) AS total, COUNT(price) AS known FROM books_known_example GROUP BY category ORDER BY category;

باختصار: COUNT(*) تعد السجلات، وCOUNT(column) تعد القيم المعروفة في العمود المحدد.

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

اختبر فهمك

أي صف يبقى بعد تطبيق HAVING في هذا الاستعلام؟

CREATE TABLE books_known_quiz (category VARCHAR(20), price DECIMAL(5,2));
INSERT INTO books_known_quiz VALUES ('SQL', 10), ('SQL', NULL), ('SQL', 20), ('Web', 15), ('Web', NULL), ('Art', NULL);
SELECT category, COUNT(*) AS total, COUNT(price) AS known FROM books_known_quiz
GROUP BY category HAVING COUNT(price) = 1;