标题: SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选 [打印本页] 作者: 来自云龙湖轮廓分明的月亮 时间: 2024-1-18 04:58 标题: SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选 SQL HAVING子句
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);
复制代码
演示数据库
以下是Northwind示例数据库中“Customers”表的一部分选择:
CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22SwedenSQL HAVING示例
以下SQL语句列出了每个国家的客户数量。只包括拥有超过5名客户的国家:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
复制代码
以下SQL语句列出了每个国家的客户数量,按高到低排序(只包括拥有超过5名客户的国家):
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
复制代码
演示数据库
以下是Northwind示例数据库中“Orders”表的一部分选择:
OrderIDCustomerIDEmployeeIDOrderDateShipperID102489051996-07-043102498161996-07-051102503441996-07-082以及“Employees”表的一部分选择:
EmployeeIDLastNameFirstNameBirthDatePhotoNotes1DavolioNancy1968-12-08EmpID1.picEducation includes a BA....2FullerAndrew1952-02-19EmpID2.picAndrew received his BTS....3LeverlingJanet1963-08-30EmpID3.picJanet 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;
复制代码
以下SQL语句列出了是否员工“Davolio”或“Fuller”注册了超过25个订单:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID