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

MySQL如何按test_name分组填充同组内空unit字段为非空值

解决方案

可以通过UPDATE关联分组子查询的方式实现该需求,核心逻辑是先按test_name分组取出每组非空的unit值,再关联原表更新空字段即可,你要的UPDATE JOIN写法完全可以实现。

实现说明

我们用聚合函数(MAX/MIN均可)提取每组非空unit,空值在聚合计算时会被自动忽略,刚好满足「取同组任意非空值」的要求。

主流数据库写法示例

MySQL 写法

UPDATE tests t1
INNER JOIN (
    SELECT 
        test_name, 
        MAX(unit) AS filled_unit 
    FROM tests 
    WHERE unit IS NOT NULL AND unit != ''
    GROUP BY test_name
) t2 ON t1.test_name = t2.test_name
SET t1.unit = t2.filled_unit
WHERE t1.unit IS NULL OR t1.unit = '';

PostgreSQL 写法

UPDATE tests t1
SET unit = t2.filled_unit
FROM (
    SELECT 
        test_name, 
        MAX(unit) AS filled_unit
    FROM tests
    WHERE unit IS NOT NULL AND unit != ''
    GROUP BY test_name
) t2
WHERE t1.test_name = t2.test_name
AND (t1.unit IS NULL OR t1.unit = '');

执行效果验证

针对你给出的示例数据,执行语句后:

  • id=2的Current记录空unit会填充为A
  • id=5的Voltage记录空unit会填充为V/v(取决于用MAX还是MIN聚合,均符合需求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:57:03