首先说一下having的概念:HAVING子句主要用于对聚合函数的分组结果进行筛选,通常与GROUP BY一起使用。如果没有GROUP BY,通常使用WHERE子句来筛选行而不是使用HAVING子句,但也是可以使用HAVING,只是不推荐。
- having子句即可包含聚合函数作用的字段也可以包括普通的标量字段
HAVING子句用于筛选分组后的结果集,可以包括聚合函数作用的字段以及普通的标量字段。
- 使用having的同时可以使用where子句
WHERE子句用于筛选从表中检索的行,而HAVING子句用于筛选分组后的结果。我们可以在同一查询中同时使用WHERE和HAVING,分别对行和分组进行筛选。
- having子句可以脱离于group by子句使用,效果与where一样,但不推荐没有group by时使用having
这里可能存在一些混淆。HAVING子句通常与GROUP BY子句一起使用,用于对分组后的数据进行过滤。如果没有GROUP BY子句,HAVING子句的效果与WHERE子句类似,但是在没有GROUP BY的情况下使用HAVING通常是不合理的,因为它的主要目的是筛选分组。在没有GROUP BY的情况下,应该使用WHERE来筛选行。
- 使用having子句的作用是限定分组条件
HAVING子句用于在GROUP BY子句中对分组进行条件筛选,它允许筛选聚合结果,例如,仅选择总和大于某个值的分组。
- select语句中没有聚合函数时,也可以使用having子句
这个说法确实不正确。在SELECT语句中没有聚合函数的情况下,HAVING子句没有合适的用途,使用它可能导致语法错误或不符合查询的逻辑目标。所以不推荐这样使用,之前只是想表达可以用,但现在看来没有任何意义。
文档最初发布于20年底,现在看来之前确实有很多没有说清楚和错误的地方,所以加了一些解释和修改,希望大家随时评论,我会及时修改。