شرح صفوف ومحتوى الفقرة
بعد ربط الجداول عبر INNER JOIN، يمكنك دمجها بسلاسة مع جمل التصفية والتجميع WHERE وGROUP BY وHAVING وORDER BY لبناء تقارير تحليلية دقيقة:
- التصفية المسبقة بـ
WHERE: صفِّ السجلات المترابطة (مثلWHERE o.status = 'paid') قبل مرحلة تجميع المجموعات. - التجميع بالمفتاح الأساسي: جمّع دائماً حسب المفتاح الأساسي والاسم معاً (
GROUP BY u.user_id, u.full_name) للتوافق مع وضعONLY_FULL_GROUP_BYالافتراضي في MySQL 8، ولمنع دمج عميلين مختلفين يحملان الاسم الشخصي ذاته عن طريق الخطأ.
SQL
-- Aggregate paid revenue per customer across joined tables
SELECT
u.user_id,
u.full_name,
COUNT(o.order_id) AS paid_orders,
SUM(o.total_amount) AS lifetime_value
FROM users AS u
INNER JOIN orders AS o ON u.user_id = o.user_id
WHERE o.status = 'paid'
GROUP BY u.user_id, u.full_name
ORDER BY lifetime_value DESC;