您的位置:58脚本 > sqlhaving的用法 SQL HAVING 子句

sqlhaving的用法 SQL HAVING 子句

2023-03-11 18:32 MySQL教程

sqlhaving的用法 SQL HAVING 子句

sqlhaving的用法

SQL HAVING 子句用于从组中筛选数据,它与 SELECT 子句的 WHERE 子句非常相似,但是它们之间有一个重要的区别。WHERE 子句用于在查询中过滤行,而 HAVING 子句用于在分组后过滤组。

HAVING 子句必须与 GROUP BY 子句一起使用,因为它引用列的分组。如果不使用 GROUP BY,HAVING 将忽略请求并生成错误。

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

HAVING 语法允许我们在 SELECT 语句中使用聚合函数(例如 COUNT、MAX、MIN、SUM 等)。它允许我们根据聚合函数的值来过滤行。例如,我们可以使用 HAVING 条件来显示所有具有大于 10 的总销售额的客户。

SELECT CustomerName, SUM(OrderPrice) AS TotalSales 
FROM Orders 
GROUP BY CustomerName 
HAVING SUM(OrderPrice) > 10;

此外,HAVING 还允许我们对列进行条件过滤(就像 WHERE 子句一样)。例如,我们可以使用 HAVING 条件来显示所有具有大于 10 的总销售额的客户名称开头字母“A”的客户。

SELECT CustomerName, SUM(OrderPrice) AS TotalSales 
FROM Orders 
GROUP BY CustomerName  
HAVING SUM(OrderPrice) > 10 AND CustomerName LIKE 'A%';

SQL HAVING 子句

SQL HAVING 子句


HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与 Aggregate 函数一起使用。

SQL 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;


演示数据库

在本教程中,我们将使用众所周知的 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....


SQL HAVING 实例

现在我们想要查找订单总数少于 2000 的客户。

我们使用下面的 SQL 语句:

下面的 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;

现在我们想要查找员工 "Davolio" 或 "Fuller" 是否拥有超过 25 个订单。

我们在 SQL 语句中增加一个普通的 WHERE 子句:

实例

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;
阅读全文
以上是58脚本为你收集整理的sqlhaving的用法 SQL HAVING 子句全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS