شرح صفوف ومحتوى الفقرة
عند وضع استعلام فرعي داخل جملة FROM، يعامل MySQL مخرجاته كجدول مؤقت افتراضي يُسمى الجدول المشتق (Derived Table):
- إلزامية الاسم المستعار: يشترط MySQL منح كل جدول مشتق اسماً مستعاراً بعد قوس الإغلاق مباشرةً (مثل
FROM (SELECT ...) AS order_totals)، وإغفاله يطلق الخطأ رقم 1248. - التجميع ثنائي المراحل: تتيح الجداول المشتقة حساب متوسط المجاميع (مثل متوسط إجمالي إنفاق كل عميل) وهو ما لا يمكن كتابته مباشرة بتداخل
AVG(SUM(...)).
SQL
-- Compute average customer lifetime spend via a derived table in FROM
SELECT
COUNT(*) AS active_customers,
ROUND(AVG(customer_totals.lifetime_spend), 2) AS avg_lifetime_spend
FROM (
SELECT user_id, SUM(total_amount) AS lifetime_spend
FROM orders
WHERE status = 'paid'
GROUP BY user_id
) AS customer_totals;