القائمة الرئيسية

الصفحات

الدرس 13 SQL

الدالة COUNT()

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


الشكل العام لإستخدامها

    SELECT COUNT(column_name)
    FROM table_name
    WHERE condition;
  

إذاً نستدعي الدالة COUNT() مباشرةً بعد الكلمة SELECT.
إسم العامود الذي نريد الحصول على عدد الحقول الغير فارغة الموجودة فيه نكتبه بين أقواس الدالة مكان الكلمة column_name.

تجهيز قاعدة البيانات التي سنطبق عليها

قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه users يحتوي على بيانات 10 مستخدمين.

الإستعلام

      -- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
      DROP DATABASE IF EXISTS harmash;

      -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
      CREATE DATABASE harmash;

      -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
      USE harmash;

      -- يتألف من 4 أعمدة users هنا قمنا بإنشاء جدول جديد إسمه
      -- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
      CREATE TABLE users (
      id         INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
      first_name VARCHAR(50),
      last_name  VARCHAR(50),
      country    VARCHAR(50)
      );

      -- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 مستخدمين
      -- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
      -- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة
      -- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة
      INSERT INTO users VALUES (null, "Rami", "Masri", "Lebanon");
      INSERT INTO users VALUES (null, "Ahmad", "Naji", "Syria");
      INSERT INTO users VALUES (null, "Hanan", "Mostafa", "KSA");
      INSERT INTO users VALUES (null, "Saly", "Harmush", null);
      INSERT INTO users VALUES (null, "Samir", "Saleh", null);
      INSERT INTO users VALUES (null, "Hamad", "Akel", "Syria");
      INSERT INTO users VALUES (null, "Abdullah", "Helmi", "Egypt");
      INSERT INTO users VALUES (null, "Rashed", "Masri", "Oman");
      INSERT INTO users VALUES (null, "Majed", "Alali", "Yaman");
      INSERT INTO users VALUES (null, "Rayan", "Kasabi", null);
    

بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول users بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.


البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول users.

id first_name last_name country
1 Rami Masri Lebanon
2 Ahmad Naji Syria
3 Hanan Mostafa KSA
4 Saly Harmush NULL
5 Samir Saleh NULL
6 Hamad Akel Syria
7 Abdullah Helmi Egypt
8 Rashed Masri Oman
9 Majed Alali Yaman
10 Rayan Kasabi NULL

أمثلة حول استخدام الدالة COUNT()


المثال الأول

الإستعلام التالي يقوم بعرض إجمالي عدد المستخدمين في الشركة.
ما فعلناه لحساب عدد المستخدمين هو حساب كم رقم id يوجد في الجدول لأن هذا العامود لا يمكن أن يكون فيه حقول فارغة و هذا ما نحتاجه بالضبط هنا.

الإستعلام

      SELECT COUNT(id) AS 'Total Users'    -- مع تغيير إسم العامود الذي سيتم عرضه في النتيجة id هنا قمنا بجلب عدد القيم الموجودة في العامود
      FROM users;                          -- id هنا قمنا بتحديد إسم الجدول الذي يحتوي على العامود
    

يمكنك وضع الرمز * مكان الحقل id و لكن هذا الأسلوب لا ينصح به.

      SELECT COUNT(*) AS 'Total Users'
      FROM users;
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

Total Users
10


المثال الثاني

الإستعلام التالي يقوم بعرض إجمالي عدد البلدان المذكورة في عامود بلد المستخدمين.
ما فعلناه لحساب عدد البلدان المذكورة في عامود بلد المستخدمين country هو حساب كم حقل غير فارغ يوجد في العامود فقط.

الإستعلام

      SELECT COUNT(country) AS 'Total Countries'    -- مع تغيير إسم العامود الذي سيتم عرضه في النتيجة country هنا قمنا بجلب عدد القيم الموجودة في العامود
      FROM users;                                   -- country هنا قمنا بتحديد إسم الجدول الذي يحتوي على العامود
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

Total Countries
7


المثال الثالث

الإستعلام التالي يقوم بعرض إجمالي عدد البلدان المذكورة في عامود بلد المستخدمين مع عدم حساب نفس البلد أكثر من مرة.
ما فعلناه لحساب عدد البلدان المذكورة في عامود بلد المستخدمين country مع عدم حساب نفس البلد أكثر من مرة هو فلترة النتيجة العامود من أي تكرار باستخدام الكلمة DISTINCT قبل حساب كم حقل غير فارغ يوجد في العامود.

الإستعلام

      SELECT COUNT(DISTINCT country) AS 'Total Unique Countries'    -- مع تغيير إسم العامود الذي سيتم عرضه في النتيجة country هنا قمنا بجلب عدد القيم الموجودة في العامود
      FROM users;                                                   -- country هنا قمنا بتحديد إسم الجدول الذي يحتوي على العامود
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
ملاحظة: عدد البلدان الغير مكررة هو 6 لأنه تم حساب البلد Syria مرة واحدة هذه المرة.

Total Unique Countries
6


المثال الرابع

الإستعلام التالي يقوم بعرض إجمالي عدد المستخدمين الذين أصلهم من سوريا.
ما فعلناه لحساب عدد المستخدمين هنا هو وضع شرط أن الحقل country يجب أن يساوي 'Syria' حتى يتم حسابه.
أي إذا لم تكن قيمة الحقل تساوي 'Syria' سيتم تجاهل الحقل كما يتم تجاهل الحقول الفارغة.

الإستعلام

      SELECT COUNT(country) AS 'Total Users From Syria'    -- مع تغيير إسم العامود الذي سيتم عرضه في النتيجة country هنا قمنا بجلب عدد القيم الموجودة في العامود
      FROM users                                           -- country هنا قمنا بتحديد إسم الجدول الذي يحتوي على العامود
      WHERE country = 'Syria';                             -- حتى يتم حساب عدده 'Syria' يجب أن يساوي country هنا قمنا بتحديد أن 
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
ملاحظة: عدد المستخدمين الذين من سوريا هو 2 لأنه يوجد فقط مستخدمَين عندهما country يساوي 'Syria'.

Total Users From Syria
2

SQL حساب ناتج جمع قيم العامود بواسطة الدالة Sum()

الدالة SUM()

الدالة SUM() تستخدم للحصول على ناتج جمع قيم الحقول الغير فارغة الموجودة في العامود.
طبعاً يمكن استخدام هذه الدالة مع القيم الرقمية فقط.


الشكل العام لإستخدامها

    SELECT SUM(column_name)
    FROM table_name
    WHERE condition;
  

إذاً نستدعي الدالة SUM() مباشرةً بعد الكلمة SELECT.
إسم العامود الذي نريد الحصول على ناتج جمع القيم الرقمية الموجودة فيه نكتبه بين أقواس الدالة مكان الكلمة column_name.

تجهيز قاعدة البيانات التي سنطبق عليها

قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه employees يحتوي على بيانات 10 موظفين.

الإستعلام

      -- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
      DROP DATABASE IF EXISTS harmash;

      -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
      CREATE DATABASE harmash;

      -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
      USE harmash;

      -- يتألف من 6 أعمدة employees هنا قمنا بإنشاء جدول جديد إسمه
      -- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
      CREATE TABLE employees (
      id         INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
      first_name VARCHAR(50),
      last_name  VARCHAR(20),
      is_married BOOLEAN,
      salary     DECIMAL(7,2),
      birthday   Date
      );

      -- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 موظفين
      -- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
      -- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة
      -- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة
      INSERT INTO employees VALUES (null, "Ahmad", "Alhazem", false, 800, "1990-10-23");
      INSERT INTO employees VALUES (null, "Rami", "Algharib", false, 750, "1992-05-08");
      INSERT INTO employees VALUES (null, "Said", "Alnaja", true, 900, "1988-07-12");
      INSERT INTO employees VALUES (null, "Noura", "Jamali", false, 845, "1994-12-04");
      INSERT INTO employees VALUES (null, "Amani", "Sarrouf", true, 1000, "1991-10-27");
      INSERT INTO employees VALUES (null, "Mhamad", "Harmush", false, 700, "1993-11-12");
      INSERT INTO employees VALUES (null, "Ahmad", "Asaadi", true, 850, "1995-03-10");
      INSERT INTO employees VALUES (null, "Mostafa", "Shawki", true, 920, "1990-02-14");
      INSERT INTO employees VALUES (null, "Jana", "Alkassem", false, 780, "1991-08-12");
      INSERT INTO employees VALUES (null, "Houssam", "Zahrani", true, 880, "1985-09-20");
    

بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول employees بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.


البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول employees.

id first_name last_name is_married salary birthday
1 Ahmad Alhazem 0 800.00 1990-10-23
2 Rami Algharib 0 750.00 1992-05-08
3 Said Alnaja 1 900.00 1988-07-12
4 Noura Jamali 0 845.00 1994-12-04
5 Amani Sarrouf 1 1000.00 1991-10-27
6 Mhamad Harmush 0 700.00 1993-11-12
7 Ahmad Asaadi 1 850.00 1995-03-10
8 Mostafa Shawki 1 920.00 1990-02-14
9 Jana Alkassem 0 780.00 1991-08-12
10 Houssam Zahrani 1 880.00 1985-09-20

أمثلة حول استخدام الدالة SUM()


المثال الأول

الإستعلام التالي يقوم بعرض إجمالي الرواتب التي يتم إعطاءها للموظفين في الشركة كل شهر.
ما فعلناه لحساب إجمالي الرواتب هو حساب ناتج جمع جميع الرواتب الموضوعة في العامود salary.

الإستعلام

      SELECT SUM(salary) AS 'Total Salaries ($)'    -- مع تغيير إسم العامود الذي سيتم عرضه في النتيجة salary هنا قمنا بجلب ناتج جمع جميع القيم الموجودة في العامود
      FROM employees;                               -- salary هنا قمنا بتحديد إسم الجدول الذي يحتوي على العامود
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

Total Salaries ($)
8425.00


المثال الثاني

الإستعلام التالي يقوم بعرض إجمالي الرواتب التي يتم إعطاءها للموظفين المتزوجين كل شهر.
ما فعلناه لحساب إجمالي رواتب المتزوجين فقط هو وضع شرط أن الحقل is_married يجب أن يساوي 1 في السطر الذي سيتم حساب أخذ قيمة salary منه.
إذاً, في أي سطر لا تكون قيمة الحقل is_married تساوي 1 سيتم تجاهل الحقل salary الموضوعة في نفس السطر.

الإستعلام

      SELECT SUM(salary) AS 'Total Salaries For Married ($)'    -- مع تغيير إسم العامود الذي سيتم عرضه في النتيجة salary هنا قمنا بجلب ناتج جمع جميع القيم الموجودة في العامود
      FROM employees                                            -- salary هنا قمنا بتحديد إسم الجدول الذي يحتوي على العامود
      WHERE is_married = 1;                                     -- في ناتج الجمع salary يجب أن يساوي 1 حتى يتم حساب قيمة الحقل is_married هنا قمنا بتحديد أن الحقل
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

Total Salaries For Married ($)
4550.00