Oracle分组函数和筛选语句详析

时间:2024-04-07 08:06:14

分组函数:分组函数作用于一组数据,并对一组数据返回一个值

并且当分组函数嵌套了两层时就必须使用Group by 来标注出分组函数分组依据 并且分组聚合函数只能嵌套一层组函数,

\还有就是,分组函数不会让null值参与运算,但是当所有的值都是NULL时,它就会返回空值了

Group by 不能使用在SELECT语句生成的别名 因为Group by的语句优先于SELECT的查询语句如果 group by 使用了别名那会报错 .但是Order by可以使用别名因为Order
by执行的优先级最低 并且Order by语句中可以出现分组函数(当然,这只是作为排序的依据,并不会运行,或者说早运行完了,只是拿过来用,应该是这样子)

Where语句中不能包含分组函数但是Where语句中能使用子查询来间接使用组函数并且我发现WHERE语,而且我发现分组函数能使用WHERE筛选和组函数关联的列来间接筛选组函数如下图

Oracle分组函数和筛选语句详析

这样并不会报错 并且结果是一样的

Oracle分组函数和筛选语句详析

当然,这样的查询仅仅是投机取巧,因为它并没有违背WHERE不能使用组函数的规则,它不报错仅仅是因为他先于SELECT语句执行,先一步给出搜索范围,WHERE的作用和HAVING的作用是一样的,它们都为查询提供范围,区别是HAVING的筛选语句里能使用组函数

Oracle分组函数可以使用HAVING来直接进行筛选并使用ALL和ANY
SOME 来对多行数据进行比较

综上所述有分组函数想要筛选时,最好使用HAVING语句,因为HAVING最简便直接但当筛选条件不需要使用到组函数的时候,更推荐使用WHERE因为HAVING能使用组函数筛选,必定是牺牲了什么,而且虽然使用HAVING语句能达到和使用WHERE语句一样的效果,但因为使用HAVING语句则必须添加GROUP BY语句,所有我们还必须在FROM语句后面加入GROUP BY语句,尽管这个GROUP
BY语句的存在看起来毫无必要

Oracle分组函数和筛选语句详析