HAVING در SQL

دستور HAVING به SQL اضافه شد زیرا کلید واژه WHERE با توابع جمع شده قابل استفاده نیست.

ساختار HAVING

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

پایگاه داده نسخه نمایشی

یک انتخاب از جدول "Customers" نگاه کنید:

CustomerID
CustomerName
ContactName
Address
City
PostalCode
Country
1
 
Alfreds Futterkiste
Maria Anders
Obere Str. 57
Berlin
12209
Germany
2
Ana Trujillo Emparedados y helados
Ana Trujillo
Avda. de la Constitución 2222
México D.F.
05021
Mexico
3
Antonio Moreno Taquería
Antonio Moreno
Mataderos 2312
México D.F.
05023
Mexico
4
 
Around the Horn
Thomas Hardy
120 Hanover Sq.
London
WA1 1DP
UK
5
Berglunds snabbköp
Christina Berglund
Berguvsvägen 8
Luleå
S-958 22
Sweden

مثال HAVING

دستور SQL زیر تعداد مشتریان در هر کشور را فهرست می کند. فقط کشورهای دارای بیش از 5 مشتری را شامل می شود:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;

5 رکورد انتخاب شد

Expr1000
Country
9
Brazil
11
France
11
Germany
9
Brazil
7
UK
13
USA

دستور SQL زیر تعداد مشتریان در هر کشور را فهرست می کند که از بالا به پایین مرتب شده اند (فقط کشورهای دارای بیش از 5 مشتری را شامل می شوند):

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;

5 رکورد انتخاب شد

Expr1000
Country
13
USA
11
Germany
11
France
9
Brazil
7
UK

پایگاه داده نسخه نمایشی

یک انتخاب از جدول " 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....

مثال های بیشتری از HAVING

دستور SQL زیر لیست کارکنانی را که بیش از 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;

8 رکورد انتخاب شد

LastName
NumberOfOrders
Buchanan
11
Callahan
27
Davolio
29
Fuller
20
King
14
Leverling
31
Peacock
40
Suyama
18

 

دستور SQL زیر اگر کارمندان "Davolio" یا "Fuller" بیش از 25 سفارش را ثبت کرده اند:

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;

1 رکورد انتخاب شد

LastName
NumberOfOrders
Davolio
29

نظر شما

مقالات و دروس

به خبرنامه مدرسه طراحی وب ایران بپیوندید

   
   
عضویت
پیام تستی برای گروه نرم افزاری وب مهراز