جملة GROUP BY في SQL
- الصفحة السابقة SQL sum()
- الصفحة التالية SQL Having
دوال التجميع (مثل 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
- الصفحة السابقة SQL sum()
- الصفحة التالية SQL Having