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

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

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qayrup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值