Mysql 简明教程
MySQL - Having Clause
MySQL Having Clause
MySQL HAVING Clause 用于根据条件过滤表中分组的行。
这个子句与 GROUP BY 子句一起使用,根据一个或多个列对行进行分组,然后根据 HAVING 子句中指定的条件对它们进行过滤。因此,HAVING 子句必须始终跟随 GROUP BY 子句。
添加 HAVING 子句到 MySQL 中,是因为 WHERE 关键字不能与 COUNT()、SUM()、AVG() 等聚合函数一起使用。
此子句类似于 MySQL WHERE 子句。它们之间的区别在于 WHERE 子句过滤表中的单个行,而 HAVING 子句根据条件过滤分组行。
Syntax
下面是 MySQL 中 HAVING 子句的基本语法 −
SELECT column1, column2, aggregate_function(column)
FROM table_name
GROUP BY column1, column2, ...
HAVING condition
ORDER BY column1, column2, ...;
Example
让我们从使用下面的查询创建名为 CUSTOMERS 的表开始 −
CREATE TABLE CUSTOMERS (
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
下面的 INSERT 语句将 7 条记录插入到上面创建的表中 −
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );
使用以下查询,我们可以验证 CUSTOMERS 表是否创建 −
SELECT * FROM CUSTOMERS;
以下为 CUSTOMERS 表 −
HAVING clause with ORDER BY clause
在 MySQL 中,HAVING 子句过滤组,而 ORDER BY 子句对结果进行排序。当我们一起使用它们时,HAVING 先执行,然后结果集根据 ORDER BY 标准进行排序。
HAVING clause with COUNT() function
我们可以将 MySQL HAVING 子句与 COUNT() 函数结合使用,根据组中包含的行数过滤组。
HAVING clause with AVG() function
MySQL HAVING 子句也可以与 AVG() 函数一起使用,以根据指定列的平均值过滤组。