الدرس 5 من 10

دوال التجميع

هدف الدرس

الدوال COUNT وSUM وAVG

01

الشرح

تحوّل دوال التجميع عدّة صفوف إلى قيمة واحدة، فـCOUNT تعدّ الصفوف، وSUM تجمع القيم، وAVG تحسب المتوسط، وMIN وMAX تعطيانك أصغر قيمة وأكبرها. وتحسبها قاعدة البيانات في مكان البيانات نفسه، فلا تحتاج إلى نقل ألف صفّ إلى برنامجك لتجمعها هناك.

وهناك فرق ينساه كثيرون، فـCOUNT(*) تعدّ الصفوف كلها، أمّا COUNT(rating) فتعدّ القيم التي ليست NULL فقط، ولذلك يدخل الطلب الذي لم يُقيَّم في العدّ الأول ولا يدخل في الثاني.

ويكون اسم العمود الناتج هو التعبير نفسه، مثل SUM(amount)، فإن أردت اسمًا واضحًا يسهل على الكود أن يقرأه بعدك فاستعمل AS: SUM(amount) AS revenue.

02

المطلوب

اعرض من جدول orders صفًّا واحدًا فيه orders_count لعدد الطلبات، وrated_count لعدد الطلبات المقيَّمة، وrevenue لمجموع amount، وavg_amount لمتوسطه، وmin_amount وmax_amount لأصغر مبلغ وأكبره.

الفحوص

6 فحوص
  1. الأعمدة بأسمائها المطلوبة
  2. العمود orders_count يعدّ كل الطلبات
  3. العمود rated_count يتجاهل الطلبات التي بلا تقييم
  4. العمود revenue هو مجموع المبالغ
  5. العمود avg_amount هو المتوسط بكسوره العشرية
  6. العمودان min_amount وmax_amount فيهما أصغر مبلغ وأكبره
الجداول المتاحة في هذا الدرس
CREATE TABLE orders (
  id       INTEGER PRIMARY KEY,
  customer TEXT    NOT NULL,
  city     TEXT    NOT NULL,
  amount   INTEGER NOT NULL,
  rating   INTEGER
);

INSERT INTO orders (customer, city, amount, rating) VALUES
  ('ليان', 'الرياض', 120, 5),
  ('خالد', 'جدة',    300, 4),
  ('ليان', 'الرياض',  80, NULL),
  ('ريم',  'الدمام',  45, 3),
  ('سارة', 'الرياض', 210, 5),
  ('خالد', 'جدة',     50, NULL),
  ('فهد',  'جدة',    150, 2),
  ('نورة', 'الرياض',  95, 4),
  ('عمر',  'مكة',    400, NULL),
  ('ليان', 'الرياض',  35, 4),
  ('ريم',  'الدمام', 130, NULL),
  ('سارة', 'الرياض',  70, 3);
query.sql
المخرجاتSQLite (sql.js)

نحمّل بيئة SQLite الآن.

–/6

يبدأ الفحص حين تجهز البيئة.

تجد 6 فحوص في بطاقة «المطلوب».