having是不是依赖于group by

来源:百度知道 编辑:UC知道 时间:2024/06/19 03:07:43
服务器: 消息 8118,级别 16,状态 1,行 1
列 'publishers.pub_id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
服务器: 消息 8119,级别 16,状态 1,行 1
列 'publishers.pub_id' 在 HAVING 子句中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。

是依赖于group by
用于 分组后更方便的筛选,不用group by也能筛选出结果
如:
查询学生的平局成绩大于60的
SELECT FSno,AVG(FGrade) AS FAvgGrade
FROM TStudent
GROUP BY FSno
HAVING AVG(FGrade) > 60
等价于
SELECT *
FROM
(
SELECT FSno,AVG(FGrade) AS FAvgGrade
FROM TStudent
GROUP BY FSno
) AS T
WHERE FAvgGrade>60
:having性能更高,代码更简洁

关于能够用于条件筛选的
ON:联结(join)筛选
WHERE: 一般条件筛选
HAVING: 分组后的条件筛选

如果一个列 没有出现在 group by 子句中
那么该列 就不能直接出现在select 后面 或者 having 子句后面
必须加上聚合函数才行

例如:
select min(年龄) ,性别 from 职工表 group by 性别

年龄 没有出现在group by 子句中 必须加聚合函数才能写在 select 的后面

指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。HAVING 通常在 GROUP BY 子句中使用。如果不使用 GROUP BY 子句,则 HAVING 的行为与 WHERE 子句一样。

这是他们帮助文档上的,这个意思我理解是可以没有GROUP BY 的,可试了不行,应该不可以没有GROUP BY , 要不他们没有必要再设计一个where了,HAVING完全可以代替WHERE 了。

可以这么理解,但是有groupby不一定有having子句,
For Example:

select * from 表