عبارت HAVING در SQL Server
در SQL Server، دستور HAVING شامل یک یا چند شرط است که باید برای گروه هایی از رکوردها درست (TRUE) باشد. این مانند عبارت WHERE از GROUP BY است. تنها تفاوت این است که عبارت WHERE را نمی توان با توابع aggregate استفاده کرد، در حالی که عبارت HAVING می تواند از توابع aggregate استفاده کند.
به عبارت دیگر، دستور شرطی HAVING بسیار شبیه به دستور WHERE عمل می کند، فقط مزیت دستور HAVING در امکان استفاده از توابع ریاضی در ساختار این دستور است.
عبارت HAVING همیشه بعد از GROUP BY و قبل از ORDER BY می آید.
سینتکس آن به صورت زیر است:
ویژگی های عبارت HAVING در SQL Server :
1 - HAVING برای فیلتر کردن رکوردهای گروه بندی استفاده می شود.
2 - HAVING باید بعد از GROUP BY و قبل از ORDER BY باشد.
3 - HAVING می تواند شامل یک یا چند شرط باشد.
4 - شرط HAVING فقط می تواند شامل ستون هایی باشد که با عبارت GROUP BY استفاده می شوند. برای استفاده از ستون های دیگر در شرط HAVING، از توابع aggregate با آنها استفاده کنید.
برای تفهیم بیشتر، از جداول Employee و Department زیر در تمام مثال های اینجا استفاده خواهیم کرد.
در بخش GROUP BY از کویری زیر برای بازیابی شماره کارمندان هر بخش مانند شکل زیر استفاده کردیم.
کویری فوق نتیجه زیر را در SQL Server برمی گرداند.
حال برای فیلتر کردن نتیجه کویری GROUP BY بالا، مانند شکل زیر از عبارت HAVING با تابع aggregate استفاده کنید.
توجه داشته باشید که ما از یک تابع aggregate به نام COUNT() در عبارت HAVING استفاده کردیم زیرا EmpId در عبارت GROUP BY گنجانده نشده است. کویری بالا نتیجه زیر را نمایش می دهد.
کویری زیر یک خطا ایجاد می کند زیرا ستون حقوق و دستمزد (Salary column) در GROUP BY گنجانده نشده است و از یک تابع aggregate استفاده نمی کند.
کویری فوق نتیجه زیر را در SQL Server برمی گرداند.