الدرس 8 من 10
المجموع التراكمي
- 12 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
SUM() OVER
الشرح
المجموع التراكمي يجيب «كم بلغت المبيعات حتى هذا اليوم؟»: كل صفّ يحمل مبلغه مضافًا إليه كل ما قبله.
SUM(total) OVER (ORDER BY placed_on) يحسبه دون أن يطوي الصفوف كما يفعل GROUP BY: ORDER BY داخل OVER يحدّد ترتيب التراكم، فيجمع كل صفّ من أوّل الترتيب حتى نفسه.
احذف ORDER BY من داخل القوسين وسترى المجموع الكلّي نفسه في كل صفّ، لأن النافذة بلا ترتيب هي المجموعة كلها. وORDER BY في آخر الاستعلام يرتّب العرض فقط، ولا يغني عن ترتيب النافذة.
المطلوب
اعرض لكل طلب placed_on وtotal وrunning — المجموع التراكمي حتى ذلك الطلب — مرتّبة بالتاريخ.
معايير التصحيح
5 معايير- الأعمدة placed_on و total و running
- صفّ لكل طلب
- مرتّبة بالتاريخ
- كل صفّ يضيف طلبه إلى ما قبله
- الأخير يساوي مجموع المبيعات
الجداول المتاحة في هذا الدرس
CREATE TABLE customers ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, city TEXT NOT NULL ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER REFERENCES customers(id), total INTEGER NOT NULL, placed_on TEXT NOT NULL ); INSERT INTO customers (id, name, city) VALUES (1, 'ليان', 'الرياض'), (2, 'خالد', 'جدة'), (3, 'ريم', 'الدمام'), (4, 'فهد', 'الرياض'); INSERT INTO orders (customer_id, total, placed_on) VALUES (1, 120, '2026-09-01'), (1, 80, '2026-09-12'), (2, 300, '2026-09-03'), (3, 45, '2026-09-20'), (2, 60, '2026-09-25'); INSERT INTO customers (id, name, city) VALUES (5, 'سارة', 'جدة'); CREATE TABLE products ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, price INTEGER NOT NULL ); CREATE TABLE order_items ( id INTEGER PRIMARY KEY, order_id INTEGER REFERENCES orders(id), product_id INTEGER REFERENCES products(id), qty INTEGER NOT NULL ); INSERT INTO products (id, name, price) VALUES (1, 'دفتر', 15), (2, 'قلم', 5), (3, 'حقيبة', 90), (4, 'آلة حاسبة', 60), (5, 'مصباح', 100); INSERT INTO order_items (order_id, product_id, qty) VALUES (1, 3, 1), (1, 1, 2), (2, 4, 1), (2, 2, 4), (3, 3, 2), (3, 4, 2), (4, 1, 3), (5, 1, 2), (5, 2, 6);