توابع درون ساخته SQL
دستور Group By :
در هنگام استفاده از برخی از توابع درون ساخته SQL که عمل محاسبه ( مثل مجموع و ميانگين ) را بر روی داده ها انجام می دهند ، اين مشکل وجود دارد که اين توابع قادر به جدا کردن و متمايز کردن اطلاعات موجود در دو ستون نسبت به هم نيستند و نتايج محاسبات را به صورت کلی برای همه آنها در نظر می گيرند .
از دستور Group By برای دسته بندی يک ستون بر حسب مقادير مشابه فيلدهای يک ستون ديگر استفاده می شود .
شکل کلی استفاده از اين دستور به صورت زير است :
Select نام ستون 1 , Sum ( 2 نام ستون ) ّFrom نام جدول Group By نام ستون 1 ;
مثال : فرض کنيد جدولی به صورت زير برای نمرات 2 دانشجو داريم :
|
Class Table |
|
|
Name |
Grade |
|
Ali Ahmadi |
18 |
|
Reza Hoseini |
17 |
|
Ali Ahmadi |
20 |
|
Reza Hoseini |
13 |
در صورت عدم استفاده از دستور Group By در تابع Sum خروجی زير را خواهيم داشت :
|
مثال |
|||
|
Select Sum ( Grade ) As مجموع نمرات |
کد |
||
|
خروجی |
||
- مسلما خروجی فوق مورد نظر برنامه ساز نيست . می توان با استفاده از دستور Group By ، مجموع نمرات را برای دانشجويان بر حسب ستون Name به صورت جدا محاسبه کرد و به صورت زير نمايش داد :
|
مثال |
|||||||
|
Select Name ,Sum ( Grade ) As مجموع نمرات |
کد |
||||||
|
خروجی |
||||||
مثال 2 : از جدول Students و Selection مجموع نمرات هر دانشجو را به همراه نام و نام خانوادگی ، که بر حسب نام خانوادگی مرتب شده باشد نمايش دهيد :
|
Student Table |
|||||
|
Student ID |
Name |
Family |
Major |
City |
Grade |
|
41252214 |
Ahmad |
Rezaee |
Hard Ware |
Tehran |
18 |
|
10724113 |
Ehsan |
Amiri |
Soft Ware |
Karaj |
14 |
|
10254861 |
Zahra |
Hosini |
Hard Ware |
Tehran |
17 |
|
27365187 |
Sahar |
Ahmadi |
Soft Ware |
Bam |
16 |
|
35654415 |
Hesam |
Razavi |
Soft Ware |
Tehran |
19 |
|
Selection Table |
||||
|
Student ID |
Course ID |
Term |
Year |
Grade |
|
41252214 |
1011 |
2 |
85 - 86 |
16 |
|
10724113 |
1011 |
2 |
85 - 86 |
14 |
|
41252214 |
1012 |
1 |
85 - 86 |
17 |
|
10724113 |
1012 |
1 |
85 - 86 |
11 |
|
10254861 |
1013 |
2 |
85 - 86 |
13 |
|
10254861 |
1011 |
2 |
84 - 85 |
8 |
|
27365187 |
1012 |
1 |
84 - 85 |
19 |
|
27365187 |
1013 |
1 |
84 - 85 |
16 |
|
35654415 |
1011 |
2 |
84 - 85 |
9 |
|
35654415 |
1013 |
2 |
84 - 85 |
17 |
|
مثال |
|||||||||||||||||||
|
Select Name , Family , Sum ( Selection.Grade ) As مجموع نمرات |
کد |
||||||||||||||||||
|
خروجی |
||||||||||||||||||
دستور Having :
از اين دستور برای افزودن شرط به توابع درون ساخته SQL استفاده می شود ، زيرا از دستور Where نمی توان برای کار با مقادير خروجی توابع درون ساخته SQL استفاده کرد .
به عبارت ديگر Having برای اعمال شرط به ستون ها اعمال می شود و همان کاری را می کند که Where در رکوردها انجام می دهد .با مثال های زير استفاده از دستور Having را بررسی می کنيم :
نکته : دستور Having معمولا با Group By می آيد .
- توجه : از داده های جداول زير در مثال های اين صفحه استفاده می کنيم :
|
Student Table |
|||||
|
Student ID |
Name |
Family |
Major |
City |
Grade |
|
41252214 |
Ahmad |
Rezaee |
Hard Ware |
Tehran |
18 |
|
10724113 |
Ehsan |
Amiri |
Soft Ware |
Karaj |
14 |
|
10254861 |
Zahra |
Hosini |
Hard Ware |
Tehran |
17 |
|
27365187 |
Sahar |
Ahmadi |
Soft Ware |
Bam |
16 |
|
35654415 |
Hesam |
Razavi |
Soft Ware |
Tehran |
19 |
|
Courses Table |
|||
|
Course ID |
Co Title |
Credit |
Co Type |
|
1011 |
پايگاه داده |
3 |
عملی |
|
1012 |
مباحث ويژه |
3 |
عملی |
|
1013 |
زبان تخصصی |
2 |
نطری |
|
Selection Table |
||||
|
Student ID |
Course ID |
Term |
Year |
Grade |
|
41252214 |
1011 |
2 |
85 - 86 |
16 |
|
10724113 |
1011 |
2 |
85 - 86 |
14 |
|
41252214 |
1012 |
1 |
85 - 86 |
17 |
|
10724113 |
1012 |
1 |
85 - 86 |
11 |
|
10254861 |
1013 |
2 |
85 - 86 |
13 |
|
10254861 |
1011 |
2 |
84 - 85 |
8 |
|
27365187 |
1012 |
1 |
84 - 85 |
19 |
|
27365187 |
1013
خواندن 299 بار
|
| |||