Điều khoản HAVING của MySQL
Mệnh đề HAVING của MySQL
Mệnh HAVING
đề đã được thêm vào SQL vì
WHERE
từ khóa không thể được sử dụng với các hàm tổng hợp.
Cú pháp HAVING
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY
column_name(s);
Cơ sở dữ liệu Demo
Dưới đây là lựa chọn từ bảng "Khách hàng" trong cơ sở dữ liệu mẫu Northwind:
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 |
Ví dụ về MySQL HAVING
Câu lệnh SQL sau liệt kê số lượng khách hàng ở mỗi quốc gia. Chỉ bao gồm các quốc gia có hơn 5 khách hàng:
Thí dụ
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
Câu lệnh SQL sau liệt kê số lượng khách hàng ở mỗi quốc gia, được sắp xếp từ cao đến thấp (Chỉ bao gồm các quốc gia có hơn 5 khách hàng):
Thí dụ
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID)
> 5
ORDER BY COUNT(CustomerID) DESC;
Cơ sở dữ liệu Demo
Dưới đây là lựa chọn từ bảng "Đơn hàng" trong cơ sở dữ liệu mẫu Northwind:
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 |
Và lựa chọn từ bảng "Nhân viên":
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.... |
Thêm các ví dụ có HAVING
Câu lệnh SQL sau liệt kê các nhân viên đã đăng ký hơn 10 đơn đặt hàng:
Thí dụ
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;
Câu lệnh SQL sau liệt kê nếu nhân viên "Davolio" hoặc "Fuller" đã đăng ký hơn 25 đơn đặt hàng:
Thí dụ
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;