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

الصفحات

الثلاثاء، 30 أغسطس 2016

تجميع السجلات باستخدام GROUP BY


تجميع السجلات باستخدام GROUP BY:
رأينا كيف نجري بعض العمليّات الحسابيّة باستخدام دوال التجميع.. ولكن ماذا لو أردنا مثلا أن نحصل على سجل يحتوي على عدد الكتب التي ألفها كل مؤلف؟
في هذه الحالة لن تسعفنا التعبيرات التي تعلمناها حتى الآن.
هنا تبرز أهمّية التعبير GROUP BY، الذي يقوم بتقسيم سجلات الجدول إلى مجموعات فرعية، تمتلك كل مجموعة منها القيمة نفسها في حقل معين (كرقم المؤلف مثلا)، ومن ثم يتم تطبيق دوال التجميع على كل مجموعة فرعية بمفردها، وبهذا يكون ناتج دوال التجميع عمودا يحتوي على مجموعة من الصفوف، وليس صفا واحدا كما ألفنا من قبل.. هذه هي الجملة التي تحسب عدد كتب كل مؤلف:
SELECT AuthorID, COUNT(AuthorID) AS [عدد الكتب]
FROM Books
GROUP BY AuthorID
ORDER BY [عدد الكتب]
لاحظ قدرتنا على استخدام الاسم المستعار للعمود الناتج في باقي جملة SQL.
ولكن.. الجدول الناتج من الاستعلام السابق يحتوي على أرقام المؤلفين وليس أسماءهم.. لهذا لا ضير من استخدام الفقرة Where للربط بين الجدولين كالتالي:
SELECT Author, COUNT(AuthorID) AS [عدد الكتب]
FROM Authors, Books
Where  AuthorID = Authors.ID
GROUP BY Author
ORDER BY [عدد الكتب]
لاحظ أننا قمنا بعملية التجميع في الجملة الأخيرة باستخدام الحقل Author.. السبب في هذا، هو أن هناك قيدا صارما على الحقول المذكورة في المقطع SELECT، وهو أنها جميعا يجب أن تظهر إما في المقطع GROUP BY وإما في المقطع ORDER BY.. لهذا لو تركنا التجميع على الحقل AuthorID فستعترض سيكويل سيرفر على ظهور اسم الحقل Author في المقطع SELECT! 
 

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

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

 

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

إرسال تعليق

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