الرئيسية
سجل الزوار
القائمة البريدية
راسلنا
خريطة الموقع
جديد الصور
جديد البطاقات
جديد الصوتيات
المتواجدون الآن
تغذيات RSS
2012-08-15 03:42
دوال المجموع في السكيول SQL Aggregate Function:
تعرفنا في الجزء الأول من الدرس الرابع على الدوال في السكيول، هل تذكرونها (AVG, SUM, MAX, MIN, COUNT)؟ وقد تتسائل الآن عزيزي القارئ عن معنى كلمة "دوال المجموع في السكيول SQL Aggregate Function"؟!
نقصد بدوال المجموع في السكيول أي دالة من الدوال التي تعلمناها سابقاً إذا طبقناها على جدول بعد فرز سجلاته وتصنيفها، فنطبق الدالة على جميع قيم حقل الدالة الموجودة في كل صنف على حدة، لا على جميع القيم الموجودة في الجدول كاملاً!
ربما صيغة باكوس-ناور* التالية في شرح دوال المجموع قد تزيد من اقتراب المعنى إليك:
< GROUPING column >£ < FUNCTION column >Table Name
فمثلاً: لو أردنا معرفة عدد الموظفين في كل قسم من جدول الموظفين مثلاً، سنثبت حقل القسم DNO ثم سنطبق دالة count على أي حقل في الجدول ويكتب الأمر كالتالي:
DNO £ COUNT FNAME EMPLOYEE
حيث أن £ تسمى "سكريبت إف Script F" وهي مجموعة أوامر تستخدم مع دوال المجموع في السكيول سنتعرف عليها في درس اليوم إن شاء الله!
أمر التجميع ودوال المجموع في السكيول SQL Group & Aggregate Function:
دوال المجموع في السكيول دائماً تحتاج إلى تثبيت حقل يتم الفرز من خلاله يسمى "حقل التجميع grouping_column"، يتعين هذا الحقل عن طريق أمر Group by، صيغته كالتالي:
SELECT grouping_column,function(column) FROM table GROUP BY grouping_column;
لو طبقنا أمر السكيول الذي درسناه في الدرس الرابع والذي نطلب فيه عدد ساعات العمل لجميع الموظفين في القسمين:
SELECT SUM(HOURS) AS SUM_OF_HOURS FROM WORKS_ON;
فستكون النتيجة:58 طبقت على جميع حقول HOURS في القسمين دون تحديد!
بواسطة أمر Group by نستطيع أن نسترجع عدد ساعات العمل في كل قسم على حدة، كالتالي:
SELECT PNO, SUM(HOURS) AS SUM_OF_HOURSAS FROM WORKS_ON GROUP BY PNO;
لاحظ أنه يمكننا وضع حقل التجميع كي يظهر في النتيجة بعد أمر SELECT ومع إحدى الدوال -سواء أتى ترتيبه قبل الدالة أو بعدها-، يمكننا فقط تحديد حقل(أو حقول) التجميع كي يظهر في النتيجة وليس أي حقل آخر في الجدول! كما يمكننا عدم وضعه في النتيجة.
مثال2:
لو أردنا معرفة متوسط ساعات العمل على كل منتج في الأقسام، نريد أن تظهر لنا النتيجة (اسم المنتج، متوسط عدد ساعات العمل فيه)، لاحظ أن المعلومات التي نريدها موجودة في جدولين: جدول العمل وجدول المشاريع، نكتب الأمر:
SELECT PNAME, AVG(HOURS) AS Hours_Avg
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNAME;
مثال3:
نفس المثال السابق، لكننا نريد أن تظهر النتيجة (اسم المنتج، رقمه، متوسط عدد ساعات العمل فيه)، لاحظ أننا استخدمنا حقلين كحقول تجميع هي اسم المنتج ورقمه، نكتب الأمر:
SELECT PNAME, PNO, AVG(HOURS) AS Hours_Avg
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNAME, PNO;
أمر الإحتواء ودوال المجموع في السكيول SQL HAVING & Aggregate Function:
يستخدم أمر الأحتواء مع دوال السكيول لأنه يستحيل استخدام أمر الشرط Where clause على الدوال وخصوصاً إذا طبقنا عليها التجميع Group by، لذلك فأمر الاحتواء يمكننا بطريقة ما من الشرط على الدوال والتجميع في أمر واحد في السكيول، صيغته كالتالي:
SELECT grouping_column,function(column) FROM table
GROUP BY grouping_column
HAVING function(column) condition value;
إذن، فأمر HAVING ببساطة هو أمر للشرط على الدوال يستخدم في الجملة إذا استخدمنا فيها أحد الدوال + أمر التجميع GROUP BY فقط! تذكر ذلك
مثال4:
نفس مثال 2 السابق، لكننا هنا سنشترط أن يكون متوسط عدد الساعات أقل من 15 ساعة، سنكتب هذا الشرط ضمن جملة Having لأنه شرط على نتيجة دالة، نكتب الأمر كالتالي:
SELECT PNAME, AVG(HOURS) AS Hours_Avg
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNAME
HAVING AVG(HOURS) < 15;
مثال5:
نفس مثال 3 السابق، لكننا هنا سنشترط أن يكون متوسط عدد الساعات أكبر من 15 ساعة، سنكتب هذا الشرط ضمن جملة Having لأنه شرط على نتيجة دالة، نكتب الأمر كالتالي:
SELECT PNAME, PNO, AVG(HOURS) AS Hours_Avg
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNAME, PNO
HAVING AVG(HOURS) > 15;
|
|
خدمات المحتوى
|
تقييم
|
|
|
Powered by Dimofinf cms Version 3.0.0
Copyright© Dimensions Of Information Inc.