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

如何不使用UPDATE语句填充SQL表同组内的NULL Salary字段值

解决方法:不使用UPDATE填充NULL值

针对你需要在SELECT查询中,将相同City分组下的NULL Salary替换为组内有效值的需求,以下是几种可行实现方式:

方法1:窗口函数(推荐,适配多数现代数据库)

利用窗口函数按City分组,直接获取组内非NULL的Salary值,适用于MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库。

SELECT 
    Name,
    City,
    MAX(Salary) OVER (PARTITION BY City) AS Salary
FROM Employee;

说明:PARTITION BY City将数据按城市分组,MAX(Salary)会自动忽略NULL值,取组内唯一的有效Salary(示例中为10000),并将该值应用到组内所有行。

方法2:自连接

通过表自连接匹配相同City的行,用非NULL值填充对应NULL项。

SELECT 
    e.Name,
    e.City,
    COALESCE(e.Salary, e2.Salary) AS Salary
FROM Employee e
JOIN Employee e2 ON e.City = e2.City
WHERE e2.Salary IS NOT NULL
GROUP BY e.Name, e.City, e.Salary;

说明:COALESCE函数优先取当前行的Salary,若为NULL则取连接到的非NULL Salary;最后通过GROUP BY避免因自连接产生的重复行。

方法3:子查询+聚合函数

通过子查询提前获取每个City对应的有效Salary,再关联到原表返回结果。

SELECT 
    e.Name,
    e.City,
    (SELECT MAX(Salary) FROM Employee WHERE City = e.City) AS Salary
FROM Employee e;

说明:子查询针对每一行的City,查询该城市下的非NULL Salary(MAX函数忽略NULL),并将结果填充到对应行的Salary字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:25:20