الدرس 6 من 10

تسمية النتائج الوسيطة

هدف الدرس

WITH: خطوات بأسماء

01

الشرح

حين يكبر الاستعلام الفرعي ويتداخل، تصير قراءته أصعب من كتابته. WITH يعطي النتيجة الوسيطة اسمًا في رأس الاستعلام، ثم تقرأ منها كأنها جدول: WITH sales AS (SELECT ...) SELECT ... FROM sales.

والاسم يُستعمل أكثر من مرّة. «المنتجات التي يزيد إيرادها على المتوسّط» تحتاج الإيرادات مرّتين: لتعرضها، ولتحسب متوسّطها. بلا WITH تكتب التجميع نفسه مرّتين، ثم تصلح خطأً في نسخة وتنساه في الأخرى.

وWITH والاستعلام الذي يليه جملة واحدة: فاصلة منقوطة بينهما تقطعها بخطأ، والاسم لا يعيش بعدها.

02

المطلوب

احسب في WITH sales إيراد كل منتج — مجموع qty * price لبنوده — ثم اعرض منه product وrevenue للمنتجات التي يزيد إيرادها على متوسّط الإيرادات، من الأعلى.

معايير التصحيح

5 معايير
  1. العمودان product و revenue
  2. إيراد كل منتج صحيح
  3. كلها فوق متوسّط الإيرادات
  4. لا ينقص منتج مستحقّ
  5. من الأعلى إيرادًا
الجداول المتاحة في هذا الدرس
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);
query.sql
المخرجاتSQLite · sql.js

جارٍ تحميل SQLite…

–/5

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

5 معايير في بطاقة «المطلوب».