عبارت GROUP BY در SQL Server
در SQL Server از عبارت GROUP BY برای دریافت خلاصه داده ها بر اساس یک یا چند گروه استفاده می شود. گروه ها را می توان بر روی یک یا چند ستون تشکیل داد. به عنوان مثال، کویری GROUP BY برای شمارش تعداد کارکنان در هر بخش، یا برای دریافت کل حقوق و دستمزد بخش مورد استفاده قرار می گیرد.
شما باید از توابع جمعی مانند ()COUNT() ، MAX() ، MIN() ، SUM() ، AVG و غیره در کویری SELECT استفاده کنید. نتیجه عبارت GROUP BY یک سطر را برای هر مقدار از ستون GROUP BY برمی گرداند.
سینتکس آن به صورت زیر است :
عبارت SELECT می تواند شامل ستون هایی باشد که با عبارت GROUP BY استفاده می شوند. بنابراین، برای گنجاندن سایر ستون ها در عبارت SELECT، از توابع جمعی (aggregate functions) مانند ()COUNT()، MAX()، MIN()، SUM()، AVG با آن ستون ها استفاده کنید.
ویژگی های GROUP BY :
1 - GROUP BY برای تشکیل گروه هایی از رکوردها استفاده می شود.
2 - GROUP BY در صورت وجود باید بعد از WHERE و قبل از HAVING آمده باشد.
3 - GROUP BY می تواند شامل یک یا چند ستون برای تشکیل یک یا چند گروه بر اساس آن ستون ها باشد.
4 - فقط ستون های GROUP BY را می توان در SELECT گنجاند. برای استفاده از ستون های دیگر در SELECT، از توابع جمع با آنها استفاده کنید.
جهت تفهیم بیشتر، از جداول Employee و Department زیر در همه مثال ها استفاده خواهیم کرد.
کویری GROUP BY زیر را در نظر بگیرید.
کوئری فوق شامل عبارت GROUP BY DeptId است، بنابراین می توانید فقط DeptId را در عبارت SELECT وارد کنید. برای گنجاندن ستون های دیگر در عبارت SELECT باید از توابع aggregate استفاده کنید، بنابراین COUNT(EmpId) گنجانده شده است زیرا می خواهیم تعداد کارمندان در همان DeptId را بشماریم. "No of Employees" نام مستعار ستون COUNT(EmpId) است. کویری نتیجه زیر را نمایش می دهد.
کوئری زیر به جای DeptId در نتیجه، نام department را دریافت می کند.
کویری فوق نتیجه زیر را در SQL Server برمی گرداند.
به روش مشابه، کویری زیر کل حقوق و دستمزد department را دریافت می کند.
کویری فوق نتیجه زیر را در SQL Server برمی گرداند.
کویری زیر یک خطا ایجاد می کند، زیرا dept.DeptName در عبارت GROUP BY گنجانده نشده است، یا از تابع aggregate استفاده نشده است.
کویری فوق نتیجه زیر را در SQL Server برمی گرداند.