گروه مقاله : SQL Server
تاريخ انتشار : 1394/02/08 - 12:08
كد :296
چون که عبارت 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 |