- 在 SQL 中,WHERE子句指定选择列表中列的条件,但不能引用聚合函数
- HAVING子句与WHERE子句一样,指定选择条件。并且HAVING子句可以使用聚合函数对数据进行处理
- HAVING子句指定组的条件,通常包含在GROUP by子句之后构成。查询结果仅包括满足HAVING条件的组。(如果不存在GROUP BY,则所有行隐式地形成一个聚合组。)
语法
SELECT select_expr [, select_expr] ...
FROM table_references [PARTITION partition_list]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
HAVING where_condition;
参数 |
说明 |
||||||||||
select_expr |
包含选择列表,该列表指示要检索的列。指定列或表达式,或者可以使用 * 必须至少有一个select_expr |
||||||||||
[FROM table_references [PARTITION partition_name,[partition_name] … ] ] |
指定语句作用到的数据表名
|
||||||||||
[WHERE where_condition] |
WHERE子句(如果给定)指示行必须满足的条件才能被选择。 如果没有WHERE子句,语句将选择所有行
|
||||||||||
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]] |
使用GROUPBY时对任意列进行排序,可以使用列名、列别名或列位置在ORDER BY和GROUP BY子句中引用为输出选择的列。列位置为整数,以1开头:
|
||||||||||
HAVING where_condition |
HAVING子句与WHERE子句一样,指定选择条件。WHERE子句指定选择列表中列的条件,但不能引用聚合函数。
HAVING子句指定组的条件,通常由GROUP by子句构成。查询结果仅包括满足HAVING条件的组。(如果不存在GROUP BY,则所有行隐式地形成一个聚合组。)
注 HAVING子句必须位于任何GROUP BY子句之后和任何ORDER BY子句之前 如果HAVING子句引用的列不明确,则会出现警告 |
示例
mysql> SELECT name,sex,height
-> FROM tb_student
-> GROUP BY height
-> HAVING AVG(height)>170;
运行结果如下:
+----------+------+---------+
| name | sex | height |
+----------+------+---------+
| John | 女 | 172 |
| Jim | 女 | 175 |
| Thomas | 女 | 178 |
| Henry | 女 | 185 |
+----------+------+---------+
4 rows in set (0.00 sec)