الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

الدرس السادس

Featured Replies

بتاريخ:

بسم الله الرحمن الرحيم



أخوانى فى الله ... و الله انى احبكم فى الله ... اتمنى ان تكون المذاكره على ما يرام .. اليوم سوف نتحدث على جزء هام جدا و سهل جدا و هو الفصل الرابع :

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 employees
GROUP BY department_id;

-------------------------------------------------
SELECT AVG(salary)
FROM employees
GROUP BY department_id;

--------------------------------------------------
SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP 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 employees
WHERE AVG(salary) > 8000



اما الأجابه الصحيحه كما يلى :



SELECT department_id, AVG(salary)
FROM employees
Having AVG(salary) > 8000
GROUP BY department_id;
-------------------------------------------------------------------
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000;
--------------------------------------------------------------------
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);



هذا و بالله التوفيق ....
اللقاء القادم مع الدرس السابع وهو هااااااااااااااااااااااااااااااااااااااااااااااااااام :

Displaying Data from Multiple Tables



ترقبوا الدرس القادم ............

الواجب : حل كل التمارين على الفصل الرابع فى كتاب اوراكل

المرفقات: شرح الفصل الفصل الرابع
اسئلة الأمتحان على الفصل الرابع فقط

Les04.zip

group_functions.pdf

بتاريخ:

جزاك الله خيرا استاذنا المبدع سامح على دروسك و جهودك التي تبذلها لتعليمنا ..

تبين لنا من هذا الدرس أننا نستطيع وضع شروط على جملة 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



دعواتي لك بالتوفيق استاذنا سامح ..

بتاريخ:

جزاك الله كل خير استاذ سامح
جزاك الله كل خير اخي محمد
شرح جميل و توضيح نقاط جميله جدا من الاخ محمد
جعلها الله في ميزان حسناتكم

بتاريخ:
  • كاتب الموضوع

جزاكم الله كل الخير و ربنا معاكم ..

بتاريخ:

أسأل الله أن يجعل هذا العمل في ميزان حسناتك أستاذن الفاضل

بتاريخ:

بارك الله لك بعلمك وعملك

  • بعد 3 شهور...
بتاريخ:

:rolleyes:انا مبتدأ واتعلمت كثير من الدروس السابقة
جزاك الله خير

تم تعديل بواسطة الاناكوندا

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.