الدرس 6 من 10
التجميع في مجموعات
- 12 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الجملة GROUP BY
الشرح
يقسم GROUP BY city الصفوف إلى مجموعات بحسب المدينة، ثم تعمل دوال التجميع على كل مجموعة وحدها، فتحصل على صفّ لكل مدينة بدل صفّ واحد للجدول كلّه.
فسؤال «كم طلبًا في كل مدينة؟» يصير SELECT city, COUNT(*) FROM orders GROUP BY city.
وانتبه إلى أنّ كل عمود في SELECT يجب أن يكون مذكورًا في GROUP BY أو داخل دالة تجميع، فلو أضفت customer لأعطتك SQLite اسمًا من أيّ صفّ في المجموعة دون أن تحذّرك، أمّا PostgreSQL فترفض الاستعلام.
المطلوب
اعرض لكل مدينة city وorders_count لعدد طلباتها وrevenue لمجموع مبالغها، ورتّب النتيجة من الأعلى إيرادًا إلى الأقل.
الفحوص
5 فحوص- الأعمدة city وorders_count وrevenue
- صفّ واحد لكل مدينة
- عدد الطلبات صحيح لكل مدينة
- الإيراد صحيح لكل مدينة
- مرتّبة من الأعلى إيرادًا
الجداول المتاحة في هذا الدرس
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);