الدرس 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 معايير في بطاقة «المطلوب».