MySQL 中的 HAVING 语句用于在 GROUP BY 子句后对聚合结果进行筛选。HAVING语句的作用类似于 WHERE语句,但是它是在聚合操作之后进行的筛选,而 WHERE语句是在聚合操作之前进行的筛选。
HAVING condition
其中,`condition` 是一个布尔表达式,用于指定筛选条件。HAVING语句通常与 GROUP BY语句一起使用,用于在聚合结果中筛选出满足特定条件的分组。
这是详细信息得内容。
-- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `sex` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL, `score` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('1', '张三名', '男', '80'); INSERT INTO `student` VALUES ('2', '李四浩', '男', '90'); INSERT INTO `student` VALUES ('3', '王五期', '女', '70'); INSERT INTO `student` VALUES ('4', '赵六三', '男', '40'); INSERT INTO `student` VALUES ('5', '三七熊', '女', '60');
原始数据
mysql> SELECT * from student; +----+-----------+------+-------+ | id | name | sex | score | +----+-----------+------+-------+ | 1 | 张三名 | 男 | 80 | | 2 | 李四浩 | 男 | 90 | | 3 | 王五期 | 女 | 70 | | 4 | 赵六三 | 男 | 40 | | 5 | 三七熊 | 女 | 60 | +----+-----------+------+-------+
mysql> SELECT * from student HAVING score>60; +----+-----------+------+-------+ | id | name | sex | score | +----+-----------+------+-------+ | 1 | 张三名 | 男 | 80 | | 2 | 李四浩 | 男 | 90 | | 3 | 王五期 | 女 | 70 | +----+-----------+------+-------+
*号表示输出所以字段了,可以查询score>60的数据,如果没有输出score则会报错
mysql> SELECT name,sex from student HAVING score>60; ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql> SELECT sex,COUNT(sex) as sexnum from student GROUP BY sex HAVING sexnum>2; +------+--------+ | sex | sexnum | +------+--------+ | 男 | 3 | +------+--------+
以上案例是先通过sex分组用count函数统计其数量重新命名为sexnum再用having对其筛选
1. HAVING语句必须在 GROUP BY语句之后使用,否则会报错。
2. HAVING语句中的条件只能涉及到聚合函数和GROUP BY 子句中出现的列。
3. HAVING语句中的条件不能使用子查询,除非将子查询封装在聚合函数中。
4. HAVING语句中的条件可以使用逻辑运算符(AND、OR、NOT)和比较运算符(=、!=、>、<、>=、<=)。
5. HAVING语句中的条件可以使用常量、列名和表达式。
总的来说,HAVING语句是 MySQL 中一个非常有用的语句,用于在聚合结果中筛选出满足特定条件的分组。在使用 HAVING 语句时,需要注意其语法和注意事项,以确保查询结果的正确性。