الجزء
العاشر: تجميع البيانات كفئات
Group By
في هذا الجزء سنتعلم كيفية استرجاع
البيانات وتجميعها بأستخدام دوال التجميع الخاصة Aggregate Function مثل الMIN,MAX,AVE,COUNT وبأستخدام فقرة الGroup by التى على
اساسها سيتم تجميع البيانات, وسنتعلم كيفية استخدام الWhere والHaving معها لغرض تصفية البيانات وما
الفرق بينهما:
اول شيء لغرض تطبيق الدرس اليوم
يتوجب عمل الجدول التالي:
CREATE TABLE tblEmployees
(
ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(30) NOT NULL,
Gender NVARCHAR(20) NOT NULL,
City NVARCHAR(30) NOT NULL,
Salary INT NOT NULL
)
وملأ الجدول بالبيانات التالية:
ID
|
Name
|
Gender
|
City
|
Salary
|
1
|
صفاء
|
ذكر
|
أربيل
|
295000
|
2
|
علاء
|
ذكر
|
أربيل
|
670000
|
3
|
سوزان
|
أنثى
|
بغداد
|
930000
|
4
|
أمير
|
ذكر
|
أربيل
|
350000
|
5
|
سارة
|
أنثى
|
بغداد
|
730000
|
6
|
محمد
|
ذكر
|
البصرة
|
890000
|
7
|
أحمد
|
ذكر
|
البصرة
|
980000
|
8
|
كمال
|
ذكر
|
دهوك
|
1000000
|
والأن السؤال: اريد استرجاع المبلغ
الكلي لكل رواتب الموظفين في جدول tblEmployees ؟
الجواب سهل بأستخدام دالة
التجميع Aggregate Function SUM::
ملاحظة: استخدمت في المثال اعلاه AS لغرض تسمية الحقل بأسم مستعار مثل "المبلغ
الأجمالي" لسهولة معرفة ماالمسترجع؟!, وبعدها استخدمت قطع الأقواس [] وفي داخلها عبارة "المبلغ الأجمالي" فائدة هذه الأقواس
عندما يكون الأسم المستعار للحقل به فراغ Space
وفي النتيجة قيمة واحدة فقط
مسترجعة وهي المبلغ الأجمالي لجمع كل الرواتب ووضعها بحقل واحد عن طريق دالة
التجميع Aggregate Function وهي الSUM
سؤال اخر: اريد معرفة ماهو المبلغ
الكلي لرواتب الموظفين في كل مدينة؟
الجواب: هنا حدد في كل مدينة, اي
المبلغ الكلي لرواتب الموظفين حسب كل مدينة وهذا الفئات ستحدد عن طريق Group By كالأتي:
الفكرة هي :
سؤال اخر: اريد المبلغ الكلي
لرواتب الموظفين حسب كل مدينة وحسب نوع الجنس(ذكر او انثى)؟
الجواب: نفس فكرة المثال السابق
فقط قم بتجميع البيانات المسترجعة حسب نوع الجنس Gender عن طريق الGroup By
سؤال اخر : اريد عدد الموظفين في
كل مدينة مع المبلغ الكلي لرواتبهم ومع نوع الجنس(ذكر او انثى)؟
الجواب: لأيجاد عدد الموظفين في كل
مدينة قم بأستخدام دالة التجميع Aggregate
Function وهي COUNT() :
والأن نأتي الى أستخدام الWHERE & HAVING في البدء يجب ان نعرف الفرق بين الأثنين:
·
تستخدم فقرة الWHERE مع الSELECT , INSERT, UPDATE, DELETE بينما الHAVING تستخدم فقط في الSELECT ومع الGROUP BY
·
يجب ان تستخدم الWHERE قبل فقرة الGROUP BY بينما الHAVING يجب ان
تستخدم بعد الGROUP BY , وهذا يبرهن على ان تصفية البيانات في الWHERE تتم قبل ان
تقسم الى فئات عن طريق الGROUP
BY , بينما في
الHAVING تستخدم بعد ان قسمت البيانات الى فئات عن طريق الGROUP BY.
·
يمكن استخدام دوال التجميع Aggregate Function مع الHAVING بينما لا
تستطيع مع الWHERE .
والأن بعدما عرفنا الفرق بين الWHERE و الHAVING , اريد منك
ان تسترجع كافة بيانات الذكور في محافظة أربيل
مع المبلغ الكلي لرواتبهم وعددهم؟
الجواب:
او:
سؤال اخير اريد المبلغ الكلي لرواتب الموظفين في كل
مدينة مع شرط ان يكون المبلغ اكبر من 1400,000 ?
الجواب:
قبل الجواب لأحظ الخطأ (يشير الا عدم السماح بأستخدام دوال التجميع Aggregation Function مع الWHERE)
قبل الجواب لأحظ الخطأ (يشير الا عدم السماح بأستخدام دوال التجميع Aggregation Function مع الWHERE)
ولحل ذلك قمت بأستخدام دالة التجميع SUM مع الHaving بعد الGroup By :
Comments
Post a Comment