الانتقال إلى المحتوى الرئيسي
الوحدة 14 · الدرس 2 من 354/57 في الدورة~15 min
دروس الوحدة (2/3)

CTEs متعددة ومتسلسلة

CTEs المتعددة والمتسلسلة

إن أناقة تعبيرات "With" تتألق حقًا عندما تقوم بربط العديد منها معًا. يمكنك تحديد العديد من CTEs على التوالي، مع الفصل بينها بفاصلة.

وهنا شيء يحبه الأصوليون في إعادة البناء: يمكن لـ CTEs اللاحقة ** قراءة البيانات من CTEs السابقة **، وتفريغ الحسابات التسلسلية قطعة قطعة!

مثال متعدد CTE

SQL
WITH premium_customers AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
),
top_customers AS (
  SELECT * FROM premium_customers
  WHERE total_spent > 5000
)
SELECT c.first_name, tc.total_spent
FROM customers c
JOIN top_customers tc ON c.id = tc.customer_id;

إنها برمجة بأسلوب الكتلة! كل كتلة تؤدي وظيفة واحدة فقط.

تمرين#sql.m14.l2.e1
المحاولات: 0جارٍ التحميل…

تعريف اثنين من CTEs متسلسلين: \n1) يحسب 'order_totals' 'customer_id' و'order_count' الموضوعين باستخدام `COUNT(*)` من 'orders'.\n2) يقرأ 'gold_users' من 'order_totals' الذي يقوم بتصفية العملاء باستخدام 'order_count >= 2'.\nأخيرًا، انضم إلى جدول 'customers' (استخراج 'first_name' و 'last_name') مع 'gold_users' (ON c.id = g.customer_id)، وإظهار أيضًا 'order_count' الخاص بهم.

جارٍ تحميل المحرر…
إظهار التلميح

افصل بين إجماليات الطلب ومستخدمي الذهب بفاصلة (لا يوجد ثانية مع!)

الحل متاح بعد 3 من المحاولات

تمرين#sql.m14.l2.e2
المحاولات: 0جارٍ التحميل…

الآن دعونا نستخدم عدة CTEs لتبسيط المقاييس: أنشئ "max_price" (استخرج صفًا واحدًا بـ "max_value" باستخدام "MAX(unit_price)" من "order_items"). في الاستعلام الرئيسي، استخرج كل "product_id" و"unit_price" من "order_items" وأظهر مدى اختلافه عن الحد الأقصى للسعر، مع حساب "(SELECT max_value FROM max_price) - Unit_price AS Difference". لا يوجد انضمام - استخدم استعلامًا فرعيًا في CTE للحصول على قيمة واحدة!

جارٍ تحميل المحرر…
إظهار التلميح

مع الحد الأقصى للسعر AS (...) حدد معرف المنتج، سعر الوحدة، (حدد الحد الأقصى_القيمة من الحد الأقصى_السعر) - سعر الوحدة من الطلب_العناصر؛

الحل متاح بعد 3 من المحاولات