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

Oracle数据库中用中位数填充空值的简化实现方法咨询

简化Oracle SQL空值填充中位数的实现方式

你当前的写法不仅繁琐,还存在两处明显问题:一是临时表命名TEMP NULL非法(空格不允许,应为TEMP_NULL);二是UNION子查询里错误关联了TEMP_NOT_NULL,会导致数据重复。

完全不需要拆分多个临时表,用以下两种更简洁的方式就能实现需求:

方法1:子查询+NVL函数

直接通过子查询获取中位数,配合NVL函数替换空值:

CREATE TABLE NEW_TABLE AS
SELECT 
    PK_ID,
    NVL(COLUMN_NAME, (SELECT MEDIAN(COLUMN_NAME) FROM TABLE_ORIGIN)) AS COLUMN_NAME
FROM TABLE_ORIGIN;

方法2:分析函数+NVL函数

利用Oracle的分析函数MEDIAN() OVER(),将中位数一次性广播到所有行,仅需扫描一次原表:

CREATE TABLE NEW_TABLE AS
SELECT 
    PK_ID,
    NVL(COLUMN_NAME, MEDIAN(COLUMN_NAME) OVER()) AS COLUMN_NAME
FROM TABLE_ORIGIN;

两种方法都能直接生成目标表,其中方法2的执行效率通常更高,因为它只对原表做一次全表扫描,而方法1可能会扫描两次(取决于Oracle的优化器策略)。

内容的提问来源于stack exchange,提问作者Ale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 12:22:31