أهلاً بك يا بطل قواعد البيانات! اليوم سنتعلم اثنتين من أهم التعليمات في SQL التي ستجعلك تتحكم في بياناتك كالمحترفين: GROUP BY و ORDER BY. يلا نبدأ!
1. تعليمة GROUP BY: تجميع البيانات
GROUP BY هي أداتك السحرية لما تحتاج تجمع صفوف متشابهة في مجموعات وتطبق عليها دوال تجميعية (Aggregate Functions) زي COUNT()، SUM()، AVG()، MIN()، MAX().
تخيل عندك جدول طلبات (Orders) وعايز تعرف كم طلب لكل عميل. هنا يجي دور GROUP BY.
مثال عملي على GROUP BY:
لنفرض أن لدينا جدول اسمه Orders بهذا الشكل:
Orders Table:
| OrderID | CustomerID | OrderDate | Amount |
|---|---|---|---|
| 1 | 101 | 2023-01-01 | 150.00 |
| 2 | 102 | 2023-01-02 | 200.00 |
| 3 | 101 | 2023-01-03 | 50.00 |
| 4 | 103 | 2023-01-04 | 300.00 |
| 5 | 102 | 2023-01-05 | 100.00 |
لو أردت معرفة إجمالي المبالغ لكل عميل، تستخدم هذا الكود:
SELECT CustomerID, SUM(Amount) AS TotalAmount
FROM Orders
GROUP BY CustomerID;
النتيجة ستكون كالتالي:
| CustomerID | TotalAmount |
|---|---|
| 101 | 200.00 |
| 102 | 300.00 |
| 103 | 300.00 |
ملاحظة مهمة: أي عمود تختاره في تعليمة
SELECTولا يكون جزءاً من دالة تجميعية (SUM,COUNTإلخ)، يجب أن يكون موجوداً في تعليمةGROUP BY.
2. تعليمة ORDER BY: ترتيب النتائج
ORDER BY هي المسؤولة عن ترتيب نتائج استعلامك، سواء تصاعدياً (ASC - Ascending) أو تنازلياً (DESC - Descending). تقدر ترتب بناءً على عمود واحد أو أكثر.
تخيل أنك تريد عرض قائمة العملاء مرتبة أبجدياً حسب أسمائهم، أو الطلبات مرتبة من الأحدث للأقدم.
مثال عملي على ORDER BY:
لو أردت عرض جميع الطلبات مرتبة من الأحدث للأقدم (تنازلياً حسب التاريخ):
SELECT OrderID, CustomerID, OrderDate, Amount
FROM Orders
ORDER BY OrderDate DESC;
النتيجة ستكون (بافتراض أن الترتيب الأصلي للجدول كان عشوائياً):
| OrderID | CustomerID | OrderDate | Amount |
|---|---|---|---|
| 5 | 102 | 2023-01-05 | 100.00 |
| 4 | 103 | 2023-01-04 | 300.00 |
| 3 | 101 | 2023-01-03 | 50.00 |
| 2 | 102 | 2023-01-02 | 200.00 |
| 1 | 101 | 2023-01-01 | 150.00 |
ملاحظة: الترتيب الافتراضي هو
ASC(تصاعدي)، يعني لو ما حددتASCأوDESC، راح يرتب تصاعدياً.
3. استخدام GROUP BY و ORDER BY معاً
غالباً ما ستحتاج إلى تجميع البيانات ثم ترتيب النتائج المجمعة. هنا يظهر جمال استخدام الاثنتين معاً.
تذكر مثال إجمالي المبالغ لكل عميل؟ ماذا لو أردت عرض العملاء الذين لديهم أعلى إجمالي مبالغ أولاً؟
مثال عملي مدمج:
لعرض إجمالي المبالغ لكل عميل، مرتبة تنازلياً حسب إجمالي المبلغ:
SELECT CustomerID, SUM(Amount) AS TotalAmount
FROM Orders
GROUP BY CustomerID
ORDER BY TotalAmount DESC;
النتيجة ستكون:
| CustomerID | TotalAmount |
|---|---|
| 102 | 300.00 |
| 103 | 300.00 |
| 101 | 200.00 |
تذكر: الترتيب مهم!
GROUP BYدائماً تأتي قبلORDER BYفي جملةSELECT.
خلاصة القول
تعليمتي GROUP BY و ORDER BY أساسيتان لأي مطور قواعد بيانات. GROUP BY تساعدك على تجميع وتحليل البيانات، بينما ORDER BY تمنحك التحكم الكامل في عرضها. تدرب عليهما جيداً وسترى كيف ستتحسن استعلاماتك!
إلى اللقاء في درس آخر!