جملة GROUP BY في SQL

دوال التجميع (مثل SUM) غالبًا ما تحتاج إلى إضافة جملة GROUP BY.

جملة GROUP BY

استخدام جملة GROUP BY يمكن جمع الوحدات بناءً على عمود واحد أو أكثر من النتائج.

قواعد اللغة SQL GROUP BY

SELECT اسم عمود, دالة التجميع(اسم عمود)
FROM اسم الجدول
WHERE اسم عمود المعادلة القيمة
GROUP BY اسم عمود

مثال SQL GROUP BY

نحن نمتلك الجدول التالي "Orders":

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 بوش
2 2008/11/23 1600 كارتر
3 2008/10/05 700 بوش
4 2008/09/28 300 بوش
5 2008/08/06 2000 أدمز
6 2008/07/21 100 كارتر

الآن، نريد العثور على المبلغ الإجمالي لكل عميل (الطلبات الإجمالية).

نريد استخدام جملة GROUP BY لجمع العملاء.

نستخدم الجملة SQL التالية:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

النتيجة المقدمة تشبه هذا:

Customer SUM(OrderPrice)
بوش 2000
كارتر 1700
أدمز 2000

رائع، أليس كذلك؟

لنلقي نظرة على ما سيحدث إذا تم تجاهل GROUP BY:

SELECT Customer,SUM(OrderPrice) FROM Orders

النتيجة المقدمة تشبه هذا:

Customer SUM(OrderPrice)
بوش 5700
كارتر 5700
بوش 5700
بوش 5700
أدمز 5700
كارتر 5700

النتيجة المقدمة ليست هي ما نريدها.

إذن لماذا لا يمكننا استخدام جملة SELECT أعلاه؟ تفسير كما يلي: تحدد جملة SELECT أعلاه عمودين (Customer وSUM(OrderPrice)). "SUM(OrderPrice)" يعود بقيمة واحدة (المجموع الكلي لعمود "OrderPrice"). بينما يعود "Customer" بستة قيم (للأسطر المختلفة في جدول "Orders"). لذلك، لا نحصل على النتيجة الصحيحة. ومع ذلك، رأيت أن جملة GROUP BY حل هذه المشكلة.

GROUP BY أكثر من عمود

يمكننا أيضًا تطبيق جملة GROUP BY على أكثر من عمود، مثل هذا:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate