آشنایی با SQL - بخش دهم - آشنایی با Group By

SQL

مثال ۱ : فرض کنید میانگین حقوق کارمندان را به تفکیک سال تولد نیاز داریم. یعنی گزارشی می خواهیم که مثلا مشخص کند میانگین حقوق کلیه کارمندان متولد ۱۳۶۰ ، ۱۲۰۰ ریال، میانگین حقوق کلیه کارمندان متولد ۱۳۶۱، ۱۱۵۰ ریال و …. است.

SELECT BithYear, AVG (Salary)
FROM Personnel
;GROUP BY BirthYear

مثال ۲ : اگر همان گزارش قبل را فقط برای متولدین قبل از ۱۳۶۰ بخواهیم:

SELECT BithYear, AVG (Salary)
FROM Personnel
WHERE BirthYear < 1360
;GROUP BY BirthYear

مثال ۳ : اما اگر  بخواهیم در خروجی گزارش همان مثال ۱ فقط ردیف هائی ظاهر شود که میانگین حقوقی محاسبه شده در انها بالاتر از ۲۰۰۰ ریال باشد نگارش زیر نادرست خواهد بود. زیرا توابع گروهی درWHERE  قابل استفاده نیستند.

SELECT BithYear, AVG (Salary)
FROM Personnel
WHERE AVG (Salary) > 2000
;GROUP BY BirthYear
شیوه صحیح استفاده از Having  می باشد:

SELECT BithYear, AVG (Salary)
FROM Personnel
GROUP BY BirthYear
;HAVING AVG (Salary) > 2000