تساعد CTE على فصل خطوة حساب الإجماليات عن خطوة اختيار النتائج المطلوبة. يمكن أن تحسب في الخطوة الأولى مجموع طلبات كل عميل، ثم تستخدم في الخطوة الثانية شرطًا على العمود الذي يحمل هذا المجموع. يصبح اسم العمود المحسوب واضحًا ومتاحًا للاستعلام الخارجي.
هذه الطريقة مفيدة عندما يحتاج الحل إلى خطوات إضافية بعد التجميع، مثل ترتيب العملاء باستخدام دوال النوافذ أو ربط الإجماليات ببيانات أخرى. ليست الفكرة أن التجميع يتطلب دائمًا CTE، بل أن تسمية النتيجة الوسيطة تجعل تدفق البيانات أسهل للفهم والتعديل.
مثال
WITH orders AS (
SELECT 1 AS id, 10 AS customer_id, 300 AS amount
UNION ALL SELECT 2, 10, 400
UNION ALL SELECT 3, 20, 200
), customer_totals AS (
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
)
SELECT customer_id, total_amount
FROM customer_totals
WHERE total_amount > 500
ORDER BY customer_id;
يعبر الشرط الخارجي عن إجمالي العميل، وليس قيمة طلب مفرد. إذا نقلنا الشرط إلى الصفوف قبل التجميع، فسيتغير السؤال الذي يجيب عنه الاستعلام. لذلك يجب تحديد المرحلة التي أصبح فيها المقدار المطلوب محسوبًا بالفعل قبل تطبيق التصفية عليه.
باختصار: احسب الإجمالي في CTE ثم تعامل مع عموده في الاستعلام الخارجي لتوضيح مراحل الحل.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.