مشخصات مقاله
-
2157
-
0.0
-
9068
-
0
-
0
عبارت HAVING در SQL
عبارت HAVING در SQL
از آنجا که عبارت WHERE نمی تواند به همراه توابع aggregate استفاده شود عبارت HAVING به این منظور به SQL اضافه شد.
فرم عبارت HAVINGدر SQL
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;مثال استفاده از HAVING در پایگاه داده
در این آموزش از نمونه پایگاه داده مشهور Northwind استفاده خواهیم کرد.
جدول زیر از میان جدول "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....
مثال
اکنون می خواهیم مشتریانی که جمع سفارش آنها کمتر از 2000 است را پیدا کنیم .
برای این منظور از دستور زیر استفاده می کنیم:
اگر هر کدام از کارکنان بیش از 10 سفارش ثبت کرده باشند، عبارت SQL زیر می تواند آنرا تشخیص داده و بیابد:
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;
اکنون می خواهیم بیابیم که کدامیک از کارکنان “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;