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

如何通过SELECT查询修正违反函数依赖A->B的SQL脏数据

基于函数依赖A->B的SQL数据清洗实现方案

核心逻辑为将原表与A对应的正确B值映射做关联,用正确B值替换原表错误B值即可,以下是两种常见场景的标准SQL实现:

场景1:已提前生成A对应的正确B映射表

假设你已经将确认好的A到正确B的映射存储在名为correct_ab_map的表中,表包含A、correct_B两个字段,直接关联查询即可得到清洗结果:

SELECT 
  t.A,
  m.correct_B AS B
FROM 你的原表名 t
INNER JOIN correct_ab_map m 
  ON t.A = m.A;

场景2:未提前生成映射表,按出现频率最高的B作为正确值

你示例中的正确B刚好是同A下出现次数最多的值,这种场景可以用标准SQL窗口函数动态计算正确映射,无需提前建映射表:

WITH ab_freq AS (
  -- 统计每个A下每个B的出现频次
  SELECT 
    A,
    B,
    COUNT(*) AS freq,
    -- 同A下按频次倒序排序,频次相同时按B字典序取第一个,避免结果不稳定
    ROW_NUMBER() OVER (PARTITION BY A ORDER BY COUNT(*) DESC, B ASC) AS rn
  FROM 你的原表名
  GROUP BY A, B
),
correct_map AS (
  -- 取每个A下频次最高的B作为正确值
  SELECT A, B AS correct_B
  FROM ab_freq
  WHERE rn = 1
)
-- 关联原表替换B值得到清洗结果
SELECT 
  t.A,
  m.correct_B AS B
FROM 你的原表名 t
INNER JOIN correct_map m 
  ON t.A = m.A;

如果使用的数据库不支持CTE语法,将上述子查询嵌套到FROM子句中即可,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:24:09