توابع درون ساخته SQL
دستور Group By :
در هنگام استفاده از برخی از توابع درون ساخته SQL که عمل محاسبه ( مثل مجموع و ميانگين
) را بر روی داده ها انجام می دهند ، اين مشکل وجود دارد که اين توابع قادر به جدا
کردن و متمايز کردن اطلاعات موجود در دو ستون نسبت به هم نيستند و نتايج محاسبات را
به صورت کلی برای همه آنها در نظر می گيرند .
از دستور Group By برای دسته بندی يک ستون بر حسب مقادير مشابه فيلدهای يک ستون ديگر
استفاده می شود .
شکل کلی استفاده از اين دستور به صورت زير است :
Select نام ستون 1 , Sum ( 2 نام ستون ) ّFrom نام جدول Group
By نام ستون 1 ;
مثال : فرض کنيد جدولی به صورت زير برای نمرات 2 دانشجو
داريم :
|
Ali Ahmadi
|
18 |
|
Reza Hoseini
|
17 |
|
Ali Ahmadi
|
20 |
|
Reza Hoseini
|
13 |
در صورت عدم استفاده از دستور Group By در تابع Sum خروجی زير را خواهيم داشت :
Select Sum ( Grade ) As مجموع نمرات
From Class ;
|
|
|
- مسلما خروجی فوق مورد نظر برنامه ساز نيست . می توان با استفاده از دستور Group By
، مجموع نمرات را برای دانشجويان بر حسب ستون Name به صورت جدا محاسبه کرد و به صورت
زير نمايش داد :
Select Name ,Sum ( Grade ) As مجموع نمرات
From Class
Group By Name ;
|
|
Ali Ahmadi
|
38
|
|
Reaz Hoseini
|
30
|
|
مثال 2 : از جدول Students و Selection مجموع نمرات هر دانشجو
را به همراه نام و نام خانوادگی ، که بر حسب نام خانوادگی مرتب شده باشد نمايش دهيد
:
|
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 |
|
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
مجموع نمرات
From Students , Selection
Where Students.Student ID = Selection.Student ID
Group By Name , Family
Order By Family;
|
|
Sahar
|
Ahmadi
|
35
|
|
Ehsan
|
Amiri
|
25
|
|
Zahra
|
Hoseini
|
21
|
|
Hesam
|
Razavi
|
26
|
|
Ahmad
|
Rezaee
|
33
|
|