You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:37:34