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

如何在SQL中将查询结果添加至现有表(基于指定列值匹配)

问题分析与解决

你的UPDATE语句没生效的核心原因是:子查询返回的是所有门店的工作日平均值集合(多行结果),数据库无法将这个集合与原表的每一行做对应匹配,自然没法正确赋值到weekday_avg列。

正确的更新方式

方法1:关联子查询(通用多数数据库)

在子查询中添加与外部表的store关联条件,让数据库明确知道每一行应该取对应门店的平均值:

UPDATE store_sales s
SET weekday_avg = (
    SELECT AVG(Sales)
    FROM store_sales
    WHERE Weekday = 'Weekday' 
      AND store = s.store -- 关键:匹配当前行的门店
);

这个语句会针对原表的每一行,找到对应门店的工作日销售额平均值,然后赋值给该行的weekday_avg列。比如门店10的工作日销售额是11000,那么它的所有行(不管是Weekday还是Weekend)的weekday_avg都会被设为11000,完全符合你的需求。

方法2:JOIN式更新(适合MySQL、PostgreSQL等支持JOIN的数据库)

先预计算各门店的工作日平均值,再通过JOIN关联原表进行更新,这种方式在数据量大时性能更优:

UPDATE store_sales s
JOIN (
    -- 先算出每个门店的工作日平均销售额
    SELECT 
        store, 
        AVG(Sales) AS avg_weekday_sales
    FROM store_sales
    WHERE Weekday = 'Weekday'
    GROUP BY store
) calc_avg ON s.store = calc_avg.store
SET s.weekday_avg = calc_avg.avg_weekday_sales;

可选优化:处理无工作日数据的门店

如果有些门店没有任何工作日销售数据,上面的语句会把它们的weekday_avg设为NULL。如果需要默认值(比如0),可以用COALESCE函数包裹子查询:

UPDATE store_sales s
SET weekday_avg = COALESCE(
    (SELECT AVG(Sales) FROM store_sales WHERE Weekday = 'Weekday' AND store = s.store),
    0 -- 无数据时设为0,可根据需求调整
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:28:12