الدرس 6 من 10

التجميع في مجموعات

هدف الدرس

الجملة GROUP BY

01

الشرح

يقسم GROUP BY city الصفوف إلى مجموعات بحسب المدينة، ثم تعمل دوال التجميع على كل مجموعة وحدها، فتحصل على صفّ لكل مدينة بدل صفّ واحد للجدول كلّه.

فسؤال «كم طلبًا في كل مدينة؟» يصير SELECT city, COUNT(*) FROM orders GROUP BY city.

وانتبه إلى أنّ كل عمود في SELECT يجب أن يكون مذكورًا في GROUP BY أو داخل دالة تجميع، فلو أضفت customer لأعطتك SQLite اسمًا من أيّ صفّ في المجموعة دون أن تحذّرك، أمّا PostgreSQL فترفض الاستعلام.

02

المطلوب

اعرض لكل مدينة city وorders_count لعدد طلباتها وrevenue لمجموع مبالغها، ورتّب النتيجة من الأعلى إيرادًا إلى الأقل.

الفحوص

5 فحوص
  1. الأعمدة city وorders_count وrevenue
  2. صفّ واحد لكل مدينة
  3. عدد الطلبات صحيح لكل مدينة
  4. الإيراد صحيح لكل مدينة
  5. مرتّبة من الأعلى إيرادًا
الجداول المتاحة في هذا الدرس
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 الآن.

–/5

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

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