توابع درون ساخته SQL
دستور Group By :
در هنگام استفاده از برخی از توابع درون ساخته SQL که عمل محاسبه ( مثل مجموع و میانگین ) را بر روی داده ها انجام می دهند ، این مشکل وجود دارد که این توابع قادر به جدا کردن و متمایز کردن اطلاعات موجود در دو ستون نسبت به هم نیستند و نتایج محاسبات را به صورت کلی برای همه آنها در نظر می گیرند .
از دستور Group By برای دسته بندی یک ستون بر حسب مقادیر مشابه فیلدهای یک ستون دیگر استفاده می شود .
شکل کلی استفاده از این دستور به صورت زیر است :
Select نام ستون ۱ , Sum ( 2 نام ستون ) ّFrom نام جدول Group By نام ستون ۱ ;
مثال : فرض کنید جدولی به صورت زیر برای نمرات ۲ دانشجو داریم :
Class Table | |
Name | Grade |
Ali Ahmadi | ۱۸ |
Reza Hoseini | ۱۷ |
Ali Ahmadi | ۲۰ |
Reza Hoseini | ۱۳ |
در صورت عدم استفاده از دستور Group By در تابع Sum خروجی زیر را خواهیم داشت :
مثال | |||
Select Sum ( Grade ) As مجموع نمرات From Class ; |
کد | ||
|
خروجی |
– مسلما خروجی فوق مورد نظر برنامه ساز نیست . می توان با استفاده از دستور Group By ، مجموع نمرات را برای دانشجویان بر حسب ستون Name به صورت جدا محاسبه کرد و به صورت زیر نمایش داد :
مثال | |||||||
Select Name ,Sum ( Grade ) As مجموع نمرات From Class Group By Name ; |
کد | ||||||
|
خروجی |
مثال ۲ : از جدول Students و Selection مجموع نمرات هر دانشجو را به همراه نام و نام خانوادگی ، که بر حسب نام خانوادگی مرتب شده باشد نمایش دهید :
Student Table | |||||
Student ID | Name | Family | Major | City | Grade |
۴۱۲۵۲۲۱۴ | Ahmad | Rezaee | Hard Ware | Tehran | ۱۸ |
۱۰۷۲۴۱۱۳ | Ehsan | Amiri | Soft Ware | Karaj | ۱۴ |
۱۰۲۵۴۸۶۱ | Zahra | Hosini | Hard Ware | Tehran | ۱۷ |
۲۷۳۶۵۱۸۷ | Sahar | Ahmadi | Soft Ware | Bam | ۱۶ |
۳۵۶۵۴۴۱۵ | Hesam | Razavi | Soft Ware | Tehran | ۱۹ |
Selection Table | ||||
Student ID | Course ID | Term | Year | Grade |
۴۱۲۵۲۲۱۴ | ۱۰۱۱ | ۲ | ۸۵ – ۸۶ | ۱۶ |
۱۰۷۲۴۱۱۳ | ۱۰۱۱ | ۲ | ۸۵ – ۸۶ | ۱۴ |
۴۱۲۵۲۲۱۴ | ۱۰۱۲ | ۱ | ۸۵ – ۸۶ | ۱۷ |
۱۰۷۲۴۱۱۳ | ۱۰۱۲ | ۱ | ۸۵ – ۸۶ | ۱۱ |
۱۰۲۵۴۸۶۱ | ۱۰۱۳ | ۲ | ۸۵ – ۸۶ | ۱۳ |
۱۰۲۵۴۸۶۱ | ۱۰۱۱ | ۲ | ۸۴ – ۸۵ | ۸ |
۲۷۳۶۵۱۸۷ | ۱۰۱۲ | ۱ | ۸۴ – ۸۵ | ۱۹ |
۲۷۳۶۵۱۸۷ | ۱۰۱۳ | ۱ | ۸۴ – ۸۵ | ۱۶ |
۳۵۶۵۴۴۱۵ | ۱۰۱۱ | ۲ | ۸۴ – ۸۵ | ۹ |
۳۵۶۵۴۴۱۵ | ۱۰۱۳ | ۲ | ۸۴ – ۸۵ | ۱۷ |
مثال | |||||||||||||||||||
Select Name , Family , Sum ( Selection.Grade ) As مجموع نمرات From Students , Selection Where Students.Student ID = Selection.Student ID Group By Name , Family Order By Family; |
کد | ||||||||||||||||||
|
خروجی |