为何Oracle中max(column) over()不会返回null?
关于Oracle中
MAX(column) OVER()不返回NULL的原因解释 - 核心原因是Oracle的MAX聚合函数本身会忽略NULL值,和
OVER()子句无关,也和“NULL被视为整数”的概念完全不沾边。 - 不管是普通聚合
MAX(column),还是窗口聚合MAX(column) OVER()(作用于整个结果集),MAX的逻辑都是只在列的非NULL值中筛选最大值:- 如果结果集中该列存在至少一个非NULL值,MAX就会返回这些非NULL值里的最大值,不会返回NULL;
- 只有当整个结果集(或窗口分区)中该列的所有值都是NULL时,MAX才会返回NULL。
- 关于你测试的
MAX(c) OVER(PARTITION BY c):当c为NULL时,Oracle会把所有NULL值划分为一个单独的分区,这个分区里没有非NULL值,所以该分区的MAX返回NULL;而非NULL值的分区会正常返回对应最大值,这是窗口分区范围导致的,和MAX忽略NULL的规则一致。 - NULL在Oracle中是代表“未知”的特殊标记,不属于任何数据类型,聚合函数对NULL的处理规则是统一的——SUM、AVG、MIN、MAX都会忽略NULL,只有
COUNT(*)会统计包含NULL的行,COUNT(column)同样忽略NULL。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

