بتاريخ: 1 ديسمبر 200718 سنة comment_117588 بسم الله الرحمن الرحيم أخوانى فى الله ... و الله انى احبكم فى الله ... اتمنى ان تكون المذاكره على ما يرام .. اليوم سوف نتحدث على جزء هام جدا و سهل جدا و هو الفصل الرابع :Group functionsتعريف الـ Group functions :تعمل هذه الدول على مجموعه صفوف و تستخرج نتيجه واحده فقط مثل ان اقوم بجمع مرتبات الموظفين ... فهنا طلبت من الداله ان تقوم بجمع كافة الصفوف و يخرج له قيمه واحده فقط و هى المجموع النهائى للمرتبات.أنواع Group functions : • AVG المتوسط الحسابى• COUNT العدد• MAX أقصى قيمه• MIN أقل قيمة• STDDEV الأنحراف المعيارى• SUM الجمع• VARIANCE التباينسوف نقوم بالتركيز على الدول الأتيه : AVG- COUNT- MIN- SUM- MAX-كيفة كتابة الداله: SELECT [column,] group_function(column), ... FROM table [WHERE condition][GROUP BY column][ORDER BY column]; مثال على استخدام هذه الدوال : SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)FROM employees; فى هذا المثال المطلوب ايجاد متوسط المرتبات و أعلى قيمه فى المرتبات و اقل قيمه و مجموع المرتبات و ذلك لكل الموظفين دون اى شرط .ولكن ماذا اذااردت معرفة اول مو تم و تعينه بالشركه و أخر موظف تم تعينه بالشركه ؟ سوف يكونالتقرير كما يلى : SELECT MIN(hire_date), MAX(hire_date)FROM employees; كيفية استخدام الداله Count :------------------------------------------يمكن استخدامها بأكثر من صيغه كما يلى :اذا اردت معرفة عدد الموظفين فى الشركه : SELECT COUNT(*)FROM employees; اذا علامة النجمه تعبر عن الكل ....* اذا اردت معرفة عدد الموظفين الذين يحصلون على عموله؟ SELECT COUNT(commission_pct)FROM employees; اذا يمكن ان نقوم بعدد عمود محدد لمعرفى العدد به.. و لكن ماذا اذا اردنا العدد و لكن دون تكرار ..؟؟ بمعنى اريد ان اقوم بعدد الأقسام المتاح بها موظفين ؟؟ فسوف يكون الكود كما يلى: SELECT COUNT(DISTINCT department_id)FROM employees; ** ملحوظه هامه جدا:---------------------------------اى group Function تتجاهل ال Null Value و بناءا عليه اذا اردنا جمع العمولات للموظفين فهناك من يأخذ عموله و أخر لا يأخد . و بالتالى دالة الجمع سوف تتجاهل اى قيمه فارغه و طبعا لا تعتبرها صفر ابدا .. و هذه لا تمثل اى مشكله لأنها حتى لو صفر فلن تتغير النتيجه و لكن المشكله سوف تأتى مع الداله AVG لأن المتوسط الحسابى عباره عن المجموع على العدد .. اذا فالداله سوف تأتى بالعدد خطأ نظرا لتجاهلها القيم الفارغه ... وبالتالى سوف تكون النتيجه خطأ و لهذا يجب علينا اولا تحويل ال null value الى صفر قبل تطبيق الداله AVG كما يلى: SELECT AVG(NVL(commission_pct, 0))FROM employees; اما فى هذا المثال فإن الأجابه خاطئه تماما : SELECT AVG(commission_pct)FROM employees; ** كيفة عمل مجاميع فرعيه:-----------------------------------اسؤال هنا ماذا تغعل لو طلبت منك عمل تقرير يوضح مجموعه مرتبات الكوظفين بالقسم رقم 90 ؟ هنا يتحتم ان تستخدم كلمه جديده و هى Group By حتى يتم الجمع على اساس القسم كما يلى : SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id;-------------------------------------------------SELECT AVG(salary)FROM employeesGROUP BY department_id;--------------------------------------------------SELECT department_id dept_id, job_id, SUM(salary)FROM employeesGROUP BY department_id, job_id; ** ملحوظه هامه جدا :----------------------------------لا يجوز وضع عمود مع اى Group Function ضمن جمله ال select دون ان تضع هذا العمود مع Group By كما يلى : SELECT department_id, COUNT(last_name)FROM employees; هنا سوف يعطيك خطأ مباشره نظرا لضروره وجود كلمه GROUP BY *** لا يجوزاستخدام WHERE مع ال Group function ولكن نستخدم كلمه جديده وهى Having .. اما اذا استخدمت where فسوف يعطيك خطأ كما يلى: SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000 اما الأجابه الصحيحه كما يلى : SELECT department_id, AVG(salary)FROM employeesHaving AVG(salary) > 8000GROUP BY department_id;-------------------------------------------------------------------SELECT department_id, MAX(salary)FROM employeesGROUP BY department_id HAVING MAX(salary)>10000;--------------------------------------------------------------------SELECT job_id, SUM(salary) PAYROLLFROM employeesWHERE job_id NOT LIKE '%REP%'GROUP BY job_id HAVING SUM(salary) > 13000ORDER BY SUM(salary); هذا و بالله التوفيق .... اللقاء القادم مع الدرس السابع وهو هااااااااااااااااااااااااااااااااااااااااااااااااااام : Displaying Data from Multiple Tables ترقبوا الدرس القادم ............الواجب : حل كل التمارين على الفصل الرابع فى كتاب اوراكل المرفقات: شرح الفصل الفصل الرابع اسئلة الأمتحان على الفصل الرابع فقط Les04.zip group_functions.pdf تقديم بلاغ
بتاريخ: 2 ديسمبر 200718 سنة comment_117655 جزاك الله خيرا استاذنا المبدع سامح على دروسك و جهودك التي تبذلها لتعليمنا ..تبين لنا من هذا الدرس أننا نستطيع وضع شروط على جملة SELECT ، و الشروط على نوعين : 1- شرط يتعلق بالأعمدة.. و هذه نستخدم معها WHERE 2- شرط يتعلق بالمجموعات .. و هذه نستخدم معها HAVINGو من وجهة نظري كطالب مبتديء .. خير مثال لهذا هو المثال الأخير الذي وضعه استاذنا المبدع سامح .. SELECT job_id, SUM(salary) PAYROLL FROM employees WHERE job_id NOT LIKE '%REP%' GROUP BY job_id HAVING SUM(salary) > 13000 ORDER BY SUM(salary); فنلاحظ أن WHERE كان الشرط فيها على نطاق العمود job_id WHERE job_id NOT LIKE '%REP%' ثم المراد هو وضع شرط على مجموع الرواتب.. لهذا استخدمنا HAVING و هي شرط يتعلق بالمجموعات.. HAVING SUM(salary) > 13000 دعواتي لك بالتوفيق استاذنا سامح .. تقديم بلاغ
بتاريخ: 2 ديسمبر 200718 سنة comment_117658 جزاك الله كل خير استاذ سامح جزاك الله كل خير اخي محمد شرح جميل و توضيح نقاط جميله جدا من الاخ محمد جعلها الله في ميزان حسناتكم تقديم بلاغ
بتاريخ: 2 ديسمبر 200718 سنة كاتب الموضوع comment_117680 جزاكم الله كل الخير و ربنا معاكم .. تقديم بلاغ
بتاريخ: 2 ديسمبر 200718 سنة comment_117695 أسأل الله أن يجعل هذا العمل في ميزان حسناتك أستاذن الفاضل تقديم بلاغ
بتاريخ: 4 أبريل 200818 سنة comment_125990 انا مبتدأ واتعلمت كثير من الدروس السابقة جزاك الله خير تم تعديل 4 أبريل 200818 سنة بواسطة الاناكوندا تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.