أهم أقسام المدونة

الصفحات

السبت، 27 أغسطس 2016

دوال التجميع Aggregate functions


دوال التجميع Aggregate functions:

تمنحك SQL بعض الدوال الجاهزة ل‘جراء بعض الحسابات على سجلات قاعدة البيانات.. لاحظ ما يلي:

- هذه الدوال تقبل معاملا واحدا فقط، هو أحد أعمدة الجدول، أو أيّ عمود جديد ناتج عن إجراء عمليّة حسابيّة (كالجمع والطرح والضرب والقسمة) على واحد أو أكثر من الأعمدة، أو أيّ عمود ناتج من جملة SELECT فرعيّة.

- هذه الدوال تعيد قيمة واحدة فقط (رقما منفردا).. أيّ أن الناتج منها هو عمود يحتوي على خانة واحدة فقط.. ولو كنت ستعرض هذه النتيجة، فاستخدم التعبير AS لمنح هذا العمود الجديد اسما مناسبا، وإلا فإن SQL ستمنحه اسما افتراضيّا.

- لا مانع من استخدام الفقرة WHERE لتحديد السجلات التي ستتمّ العمليّة الحسابيّة عليها.

وهذه الدوال هي:

 

 العدد COUNT:

تحسب عدد الخانات في العمود المرسل كمعامل.. ويمكن تطبيقها على أيّ نوع من البيانات.. والجملة التالية تحسب عدد الكتب التي ألفها توفيق الحكيم:

SELECT COUNT(Book) AS [عدد الكتب المتاحة]

FROM Books, Authors

WHERE Author = 'توفيق الحكيم'

     AND AuthorID = Authors.ID

لاحظ أن الحقول التي تحتوي على القيمة NULL لا يتمّ عدّها ضمنَ السجلات.. ولو أردت أن تفعل العكس، فعليك أن ترسل الرمز (*) كمعامل لهذه الدالة، حتى تأخذ هذه السجلات في اعتبارها:

SELECT COUNT(*) AS [عدد المؤلفين]

From Authors

 

 العدد الكبير COUNT_BIG:

مماثلة للدالة COUNT في كل شيء، إلا أن ناتج الدالة COUNT يكون عددا صحيحا من النوع int، بينما ناتج الدالة COUNT_BIG يكون عددا صحيحا كبيرا bigint، لهذا عليك استخدامها عند التعامل مع جداول ضخمة يتجاوز عدد سجلاتها 2 مليار سجل!

 

 المجموع SUM:

تحسب مجموع القيم الموجودة في خانات العمود المرسل كمعامل.. ويمكن تطبيقها على الأعمدة الرقميّة فقط.. والجملة التالية تحسب مجموع النسخ المتاحة من جميع الكتب:

SELECT SUM(Copies_No) AS [إجمالي النسخ]

From Books

 

 المتوسط AVG:

تحسب المتوسّط الحسابيّ (مجموع القيم ÷ عددها) لخانات العمود المرسل كمعامل.. ويمكن تطبيقها على الأعمدة الرقميّة فقط.. والمثال التالي يحسب متوسط عدد نسخ الكتب:

SELECT AVG(Copies_No) AS [متوسط النسخ]

From Books

 

 الأصغر MIN:

تحسب أصغر قيمة في العمود المرسل كمعامل.. ويمكن تطبيقها على الأرقام والنصوص، وفي حالة النصوص ستعيد أصغر نصّ في الترتيب الأبجديّ.

 

 الأكبر MAX:

تحسب أكبر قيمة في العمود المرسل كمعامل.. ويمكن تطبيقها على الأرقام والنصوص، وفي حالة النصوص ستعيد أكبر نصّ في الترتيب الأبجديّ.

 

 المجموع التأكيدي CHECKSUM_AGG:

هذه الدالة خاصية بـ T-SQL فقط ولا تستطيع استخدامها مع قواعد بيانات آكسيس.. وهي تجري عملية حسابية على جميع قيم العمود، وتعيد المجموع التأكيدي Check Sum، وهو قيمة يمكنك استخدامها للتأكد من أن خانات العمود لم يحدث بها تغيير، فطالما ظلت هذه القيمة ثابتة فهذا معناه أن قيم العمود لم تتغير.. هذا أفضل من حفظ جميع قيم العمود القديمة، ثم التأكد من أن كلا منها لم تتغير على حدة.. لاحظ أن هناك احتمالا صغيرا في أن تتغير بعض قيم العمود لكن تظل هذه الدالة تعطي نفس الناتج.. لاحظ أيضا أن هذه الدالة لا تهتم بكيفية ترتيب العمود.. مثال:

SELECT CHECKSUM_AGG(Copies_No)

FROM   Books

وتوجد دالة أخرى في T-SQL اسمها CHECKSUM، ولكنها ليست دالة تجميع، فهي تعيد عمودا جديدا وليس قيمة واحدة فقط.. وتنتج كل خانة في العمود العائد من حساب قيمة تقريبية Hash Value لكل خانة في العمود الأصلي.

 

 التغير الإحصائي VAR:

تحسب التغير الإحصائي Statistical Variance للقيم الموجودة في العمود.. لو لم تدرس مادة الإحصاء من قبل، فلا تشغل بالك بهذه الدالة وكل الدوال التالية!

 

 التغير الإحصائي السكاني VARP:

تحسب التغير الإحصائي السكاني Statistical variance for population للقيم الموجودة في العمود.

 

 الانحراف الإحصائي المعياري STDEV:

تحسب الانحراف الإحصائي المعياري Statistical Standard Deviation للقيم الموجودة في العمود.

 

 الانحراف الإحصائي المعياري السكاني STDEVP:

تحسب الانحراف الإحصائي المعياري السكاني Statistical Standard Deviation for Population لقيم العمود.

 

ويمكنك استخدام القيم المعادة من هذه الدوال في شروط الفقرة WHERE.. والمثال التالي يريك كيف نحسب عدد الكتب التي ألفها أوّل مؤلف في الترتيب الأبجديّ:

SELECT COUNT(Book) AS [عدد كتب المؤلف الأول]

FROM Books, Authors

WHERE AuthorID = Authors.ID

      AND Author = (SELECT MIN(Author)

                      From Authors)

حيث استخدمنا جملة SELECT فرعيّة لتعيد ناتج الدالة MIN في شرط الفقرة WHERE.. على كل حال، هناك صيغة ثانية للمثال الأخير، باستخدام الربط الداخليّ INNER JOIN الذي سنتعرّف عليه لاحقا.

ولكن ماذا لو أردت أن تطبّق هذه الدوال على حقل به قيم مكرّرة، وأردت ألا تأخذ التكرار في اعتبارك؟

في هذه الحالة يجب أن تستخدم الكلمة DISTINCT للحصول على حقل ليس به أيّ تكرار.. وتوضع هذه الكلمة قبل اسم الحقل مباشرة (داخل قوس الدالة).. والمثال التالي يريك كيف نحسب عدد المؤلفين بحساب عدد خانات الحقل AuthorID في جدول الكتب بدون تكرار:

SELECT COUNT (DISTINCT AuthorID) AS [عدد المؤلفين]

From Books

 

ملحوظة:
لاستخدام دوال التجميع في باني الاستعلام، اضغط اسم الحقل في قسم المعايير Criteria Pane بزرّ الفأرة الأيمن، ومن القائمة الموضعيّة اضغط الأمر Add Group By.. سيظهر عمود جديد في جدول الحقول اسمه Group By، وسيكون مكتوبا فيه مبديا النص Group By.. اضغط زرّ إسدال القائمة، حيث ستجد بها أسماء دوال التجميع التي يمكنك استخدامها.. اختر منها ما تريد لتطبيقه على هذا الحقل.

 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.