如何不使用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
相关产品推荐
相关产品推荐

