گروه مقاله : SQL Server
تاريخ انتشار : 1394/02/08 - 12:08
كد :296

عبارت HAVING

چون که عبارت WHERE نمی تواند به همراه توابع aggregate استفاده شود عبارت HAVING در SQL به همراه توابع aggregate آورده می شود.
فرم عبارت HAVING:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
مثال :
جدول Orders را در زیر داریم:
 
OrderID CustomerID EmployeeID OrderDate ShipperID
10248 90 5 1996-07-04 3
10249 81 6 1996-07-05 1
10250 34 4 1996-07-08 2

 

و بخشی از جدول "Employees" :

 

EmployeeID LastName FirstName BirthDate Photo Notes
1 Davolio Nancy 1968-12-08 EmpID1.pic Education includes a BA....
2 Fuller Andrew 1952-02-19 EmpID2.pic Andrew received his BTS....
3 Leverling Janet 1963-08-30 EmpID3.pic Janet has a BS degree....

 

اکنون می خواهیم کارمندانی که بیش از 10 سفارش را ثبت کرده اندرا پیدا کنیم .
از دستور زیر استفاده می کنیم :
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM (Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
نتیجه به شکل زیر خواهد بود :
 
LastName NumberOfOrders
Buchanan 11
Callahan 27
Davolio 29
Fuller 20
King 14
Leverling 31
Peacock 40
Suyama 18

 

اکنون می خواهیم اگر کارمندان "Davolio" یا "Fuller" بیش از 25 سفارش ثبت کرده اند نشان دهد.
یک عبارت WHERE به دستور SQL اضافه می شود.
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
WHERE LastName='Davolio' OR LastName='Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
 
LastName NumberOfOrders
Davolio 29
نظرات كاربران :