قد يتكرر صف الطلب بعد ربطه بجدول تفاصيل يحتوي على عدة عناصر لكل طلب. إذا جمعت مبلغ الطلب بعد هذا الربط، فسيدخل المبلغ مرة لكل عنصر. قد يبدو استخدام SUM(DISTINCT amount) حلا، لكنه يزيل تكرار الأرقام، وليس تكرار الطلبات، ولذلك قد يعطي نتيجة ناقصة.
مثال
SELECT SUM(o.amount) AS total_amount
FROM orders AS o
WHERE EXISTS (
SELECT 1
FROM order_items AS i
WHERE i.order_id = o.id
);
إذا كان هناك طلبان مختلفان بالمبلغ نفسه، فيجب أن يدخل المبلغان في الإجمالي. الصيغة السابقة تختبر وجود عناصر للطلب دون تكرار صفه، ثم تجمع كل طلب مؤهل مرة واحدة. وهي مناسبة عندما لا تحتاج إلى بيانات العناصر نفسها في الناتج.
يمكن أيضا إعداد نتيجة وسيطة تحتوي على صف واحد لكل معرف طلب قبل التجميع النهائي. المهم هو الحفاظ على هوية العملية التي تريد عدها أو جمعها، بدلا من اعتبار تشابه المبالغ دليلا على تكرار العملية.
باختصار: عالج تكرار الصفوف حسب معرف الطلب، لأن إزالة تكرار المبلغ قد تحذف مساهمات صحيحة.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.