PDA

View Full Version : Group by



حمیدرضاصادقیان
پنج شنبه 03 شهریور 1384, 16:37 عصر
سلام دوستان
میشه درمورد ایین دستور یک توضیح کامل بدین و بگین در چه مواقعی استفاده میشه
ممنون

om1559
پنج شنبه 03 شهریور 1384, 17:12 عصر
http://www.1keydata.com/sql/sqlgroupby.html

titbasoft
پنج شنبه 03 شهریور 1384, 20:00 عصر
به زبان ساده ، group by یک دسته بندی در زمان انجام aggregate function ها انجام میده.
فرض کنید می خواهید میانگین سن کل دانشجویان رو بدست بیارید. این کار به راحتی و بدون استفاده از group by انجام میشه چون برای محاسبه میانگین کل دانشجویانی که در بانک هستند رو بدون هیچ دسته بندی در نظر میگیریم:

select avg(age) from students
اما فرض کنید می خواهید میانگین سنی هر کلاس رو بدست بیارید. در اینجا شما بر اساس یک مشخصه مشترک (classID) دانشجویان ، اونها رو می خواهید دسته بندی کنید. در این شرایط از group by به صورت زیر استفاده می کنیم و به sql server می گیم که بیا دانشجوها رو طوری دسته بندی کن که همه اونهایی که مشخصه کلاس (classid) اونها یکسان است در یک دسته قرار بگیرند. حالا متوسط سنی هر دسته رو محاسبه کن

select avg(age) from students group by classID

در اینجا ذکر یک نکته مهمه. تمامی فیلد های که خارج از aggregate function در query شما وجود دارند باید group by شوند. علتش هم مشخصه ، فرض کنید این طور نباشه. query اول رو در نظر بگیرید. اگر به این صورت نوشته میشد
select classID , avg(age) from students
در اینجا در نتیجه ( avg(age دانشجویانی با classID های مختلف تاثیر دارند. حالا چگونه می توان تشخیص داد که برای classID چه مقداری در نظر گرفته بشه؟ اما در query دوم مثلا در اولین رکودی که بر میگرده همه دانشجویانی که در نتیجه (avg(age موثر هستند یک کلاس یکسان مثلا A01 دارند و که بین همه دانشجویان اون دسته یکسان است. حالا میشه برای classID مقدار A01 که در بین همه دانشجویان مجموعه یکسان است رو در نظر گرفت