1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

دستور Group By

شروع موضوع توسط hector2141 ‏26/7/13 در انجمن SQL

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    دستور Group By :

    در هنگام استفاده از برخی از توابع درون ساخته SQL که عمل محاسبه ( مثل مجموع و ميانگين ) را بر روی داده ها انجام می دهند ، اين مشکل وجود دارد که اين توابع قادر به جدا کردن و متمايز کردن اطلاعات موجود در دو ستون نسبت به هم نيستند و نتايج محاسبات را به صورت کلی برای همه آنها در نظر می گيرند .
    از دستور Group By برای دسته بندی يک ستون بر حسب مقادير مشابه فيلدهای يک ستون ديگر استفاده می شود .
    شکل کلی استفاده از اين دستور به صورت زير است :
    Select نام ستون 1 , Sum ( 2 نام ستون ) ّFrom نام جدول Group By نام ستون 1 ;
    مثال : فرض کنيد جدولی به صورت زير برای نمرات 2 دانشجو داريم :
    [TABLE="class: ex, width: 50%"]
    [TR]
    [TD="class: header, colspan: 2"] Class Table [/TD]
    [/TR]
    [TR]
    [TD="class: header"] Name [/TD]
    [TD="class: header"] Grade[/TD]
    [/TR]
    [TR]
    [TD="class: body"] Ali Ahmadi [/TD]
    [TD="class: body"] 18[/TD]
    [/TR]
    [TR]
    [TD="class: body"] Reza Hoseini [/TD]
    [TD="class: body"] 17[/TD]
    [/TR]
    [TR]
    [TD="class: body"] Ali Ahmadi [/TD]
    [TD="class: body"] 20[/TD]
    [/TR]
    [TR]
    [TD="class: body"] Reza Hoseini [/TD]
    [TD="class: body"] 13[/TD]
    [/TR]
    [/TABLE]
    در صورت عدم استفاده از دستور Group By در تابع Sum خروجی زير را خواهيم داشت :
    [TABLE="class: ex"]
    [TR]
    [TD="class: header, colspan: 2"] مثال [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Select Sum ( Grade ) As مجموع نمرات
    From Class ; [/TD]
    [TD="class: header"] کد [/TD]
    [/TR]
    [TR]
    [TD="class: body"] [TABLE="class: ex, width: 200"]
    [TR]
    [TD="class: header"] مجموع نمرات [/TD]
    [/TR]
    [TR]
    [TD="class: body, align: center"] 68 [/TD]
    [/TR]
    [/TABLE]
    [/TD]
    [TD="class: header"] خروجی [/TD]
    [/TR]
    [/TABLE]
    - مسلما خروجی فوق مورد نظر برنامه ساز نيست . می توان با استفاده از دستور Group By ، مجموع نمرات را برای دانشجويان بر حسب ستون Name به صورت جدا محاسبه کرد و به صورت زير نمايش داد :
    [TABLE="class: ex"]
    [TR]
    [TD="class: header, colspan: 2"] مثال [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Select Name ,Sum ( Grade ) As مجموع نمرات
    From Class
    Group By Name ; [/TD]
    [TD="class: header"] کد [/TD]
    [/TR]
    [TR]
    [TD="class: body"] [TABLE="class: ex, width: 400"]
    [TR]
    [TD="class: header"] Name [/TD]
    [TD="class: header"] مجموع نمرات [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Ali Ahmadi [/TD]
    [TD="class: body, align: center"] 38 [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Reaz Hoseini [/TD]
    [TD="class: body, align: center"] 30 [/TD]
    [/TR]
    [/TABLE]
    [/TD]
    [TD="class: header"] خروجی [/TD]
    [/TR]
    [/TABLE]
    مثال 2 : از جدول Students و Selection مجموع نمرات هر دانشجو را به همراه نام و نام خانوادگی ، که بر حسب نام خانوادگی مرتب شده باشد نمايش دهيد :
    [TABLE="class: ex"]
    [TR]
    [TD="class: header, colspan: 6"] Student Table[/TD]
    [/TR]
    [TR]
    [TD="class: header"] Student ID[/TD]
    [TD="class: header"] Name[/TD]
    [TD="class: header"] Family[/TD]
    [TD="class: header"] Major[/TD]
    [TD="class: header"] City[/TD]
    [TD="class: header"] Grade[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 41252214[/TD]
    [TD="class: body"] Ahmad[/TD]
    [TD="class: body"] Rezaee[/TD]
    [TD="class: body"] Hard Ware[/TD]
    [TD="class: body"] Tehran[/TD]
    [TD="class: body"] 18[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 10724113[/TD]
    [TD="class: body"] Ehsan[/TD]
    [TD="class: body"] Amiri[/TD]
    [TD="class: body"] Soft Ware[/TD]
    [TD="class: body"] Karaj[/TD]
    [TD="class: body"] 14[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 10254861[/TD]
    [TD="class: body"] Zahra[/TD]
    [TD="class: body"] Hosini[/TD]
    [TD="class: body"] Hard Ware[/TD]
    [TD="class: body"] Tehran[/TD]
    [TD="class: body"] 17[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 27365187[/TD]
    [TD="class: body"] Sahar[/TD]
    [TD="class: body"] Ahmadi[/TD]
    [TD="class: body"] Soft Ware[/TD]
    [TD="class: body"] Bam[/TD]
    [TD="class: body"] 16[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 35654415[/TD]
    [TD="class: body"] Hesam[/TD]
    [TD="class: body"] Razavi[/TD]
    [TD="class: body"] Soft Ware[/TD]
    [TD="class: body"] Tehran[/TD]
    [TD="class: body"] 19[/TD]
    [/TR]
    [/TABLE]

    [TABLE="class: ex"]
    [TR]
    [TD="class: header, colspan: 5"] Selection Table[/TD]
    [/TR]
    [TR]
    [TD="class: header"] Student ID[/TD]
    [TD="class: header"] Course ID[/TD]
    [TD="class: header"] Term[/TD]
    [TD="class: header"] Year[/TD]
    [TD="class: header"] Grade[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 41252214[/TD]
    [TD="class: body"] 1011[/TD]
    [TD="class: body"] 2[/TD]
    [TD="class: body"] 85 - 86[/TD]
    [TD="class: body"] 16[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 10724113[/TD]
    [TD="class: body"] 1011[/TD]
    [TD="class: body"] 2[/TD]
    [TD="class: body"] 85 - 86[/TD]
    [TD="class: body"] 14[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 41252214[/TD]
    [TD="class: body"] 1012[/TD]
    [TD="class: body"] 1[/TD]
    [TD="class: body"] 85 - 86[/TD]
    [TD="class: body"] 17[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 10724113[/TD]
    [TD="class: body"] 1012[/TD]
    [TD="class: body"] 1[/TD]
    [TD="class: body"] 85 - 86[/TD]
    [TD="class: body"] 11[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 10254861[/TD]
    [TD="class: body"] 1013[/TD]
    [TD="class: body"] 2[/TD]
    [TD="class: body"] 85 - 86[/TD]
    [TD="class: body"] 13[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 10254861[/TD]
    [TD="class: body"] 1011[/TD]
    [TD="class: body"] 2[/TD]
    [TD="class: body"] 84 - 85[/TD]
    [TD="class: body"] 8[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 27365187[/TD]
    [TD="class: body"] 1012[/TD]
    [TD="class: body"] 1[/TD]
    [TD="class: body"] 84 - 85[/TD]
    [TD="class: body"] 19[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 27365187[/TD]
    [TD="class: body"] 1013[/TD]
    [TD="class: body"] 1[/TD]
    [TD="class: body"] 84 - 85[/TD]
    [TD="class: body"] 16[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 35654415[/TD]
    [TD="class: body"] 1011[/TD]
    [TD="class: body"] 2[/TD]
    [TD="class: body"] 84 - 85[/TD]
    [TD="class: body"] 9[/TD]
    [/TR]
    [TR]
    [TD="class: body"] 35654415[/TD]
    [TD="class: body"] 1013[/TD]
    [TD="class: body"] 2[/TD]
    [TD="class: body"] 84 - 85[/TD]
    [TD="class: body"] 17[/TD]
    [/TR]
    [/TABLE]

    [TABLE="class: ex"]
    [TR]
    [TD="class: header, colspan: 2"] مثال [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Select Name , Family , Sum ( Selection.Grade ) As مجموع نمرات
    From Students , Selection
    Where Students.Student ID = Selection.Student ID
    Group By Name , Family
    Order By Family; [/TD]
    [TD="class: header"] کد [/TD]
    [/TR]
    [TR]
    [TD="class: body"] [TABLE="class: ex, width: 600"]
    [TR]
    [TD="class: header"] Name [/TD]
    [TD="class: header"] Family [/TD]
    [TD="class: header"] مجموع نمرات [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Sahar [/TD]
    [TD="class: body"] Ahmadi [/TD]
    [TD="class: body, align: center"] 35 [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Ehsan [/TD]
    [TD="class: body"] Amiri [/TD]
    [TD="class: body, align: center"] 25 [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Zahra [/TD]
    [TD="class: body"] Hoseini [/TD]
    [TD="class: body, align: center"] 21 [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Hesam [/TD]
    [TD="class: body"] Razavi [/TD]
    [TD="class: body, align: center"] 26 [/TD]
    [/TR]
    [TR]
    [TD="class: body"] Ahmad [/TD]
    [TD="class: body"] Rezaee [/TD]
    [TD="class: body, align: center"] 33 [/TD]
    [/TR]
    [/TABLE]
    [/TD]
    [TD="class: header"] خروجی [/TD]
    [/TR]
    [/TABLE]