كيفية استخدام التعابير الرياضية والدوال التجميعية في SQL
يا هلا! اليوم راح نشوف كيف تستغل قوة SQL في الحسابات، سواء كانت تعابير رياضية بسيطة أو دوال تجميعية معقدة. الموضوع مرة سهل ومفيد، خصوصاً لما تحتاج تحلل بياناتك.
1. التعابير الرياضية (Mathematical Expressions)
تقدر تسوي عمليات حسابية مباشرة على الأعمدة أو القيم الثابتة في جملة SELECT. الأوبيريتورز (المعاملات) اللي نعرفها كلنا موجودة:
+للجمع-للطرح*للضرب/للقسمة%لباقي القسمة (Modulo)
مثلاً، لو عندك جدول منتجات Products فيه سعر المنتج Price وكمية Quantity، وتبغى تحسب الإجمالي لكل منتج:
SELECT
ProductName,
Price,
Quantity,
Price * Quantity AS TotalValue
FROM
Products;
شوف كيف استخدمنا AS TotalValue عشان نعطي اسم حلو للعمود الجديد اللي طلعناه.
ملاحظة: انتبه لترتيب العمليات الحسابية (أقواس، ضرب وقسمة قبل الجمع والطرح) زي الرياضيات العادية بالضبط.
2. الدوال التجميعية (Aggregate Functions)
هذي الدوال رهيبة لأنها تشتغل على مجموعة من الصفوف وترجع لك قيمة واحدة. يعني ما تشتغل على كل صف لحاله، بل تجمع لك البيانات. أشهرها:
COUNT(): تحسب عدد الصفوف.SUM(): تجمع قيم عمود معين.AVG(): تحسب متوسط قيم عمود معين.MIN(): ترجع أقل قيمة في عمود معين.MAX(): ترجع أعلى قيمة في عمود معين.
COUNT()
تبغى تعرف كم منتج عندك؟
SELECT COUNT(*) AS TotalProducts FROM Products;
أو كم عميل (بدون تكرار)؟
SELECT COUNT(DISTINCT CustomerID) AS UniqueCustomers FROM Orders;
SUM() و AVG()
لو تبغى مجموع كل المبيعات ومتوسط سعر المنتج:
SELECT
SUM(OrderTotal) AS GrandTotalSales,
AVG(Price) AS AverageProductPrice
FROM
Orders;
MIN() و MAX()
أقل وأعلى سعر منتج:
SELECT
MIN(Price) AS LowestPrice,
MAX(Price) AS HighestPrice
FROM
Products;
3. استخدام GROUP BY مع الدوال التجميعية
هنا يجي الشغل الثقيل! لو تبغى تحسب دوال تجميعية لكل مجموعة من البيانات، تستخدم GROUP BY. مثلاً، تبغى تعرف مجموع المبيعات لكل عميل لحاله:
SELECT
CustomerID,
SUM(OrderTotal) AS TotalSpent
FROM
Orders
GROUP BY
CustomerID;
شوف كيف قسمنا البيانات حسب CustomerID، وبعدين حسبنا SUM(OrderTotal) لكل عميل على حدة.
4. تصفية المجموعات باستخدام HAVING
إذا كنت تبغى تصفي النتائج بعد ما تسوي التجميع (يعني بعد GROUP BY)، ما تقدر تستخدم WHERE. هنا يجي دور HAVING.
مثلاً، نبغى العملاء اللي مجموع مشترياتهم أكثر من 1000 ريال:
SELECT
CustomerID,
SUM(OrderTotal) AS TotalSpent
FROM
Orders
GROUP BY
CustomerID
HAVING
SUM(OrderTotal) > 1000;
فرق مهم:
WHEREتصفي الصفوف قبل التجميع، بينماHAVINGتصفي المجموعات بعد التجميع.
خلاصة
كذا نكون غطينا أساسيات استخدام التعابير الرياضية والدوال التجميعية في SQL. الموضوع بسيط جداً وراح يفتح لك أبواب كثيرة لتحليل بياناتك واستخلاص معلومات قيمة منها. تدرب عليها وشوف كيف بتفرق معاك!