如何在SQL中添加查询结果到table?

How to add query results to table in SQL?

我正在尝试将查询结果添加到现有 table,具体取决于现有列的值。例如使用下面的table

Store Sales Weekday
10 11000 Weekday
11 5000 Weekday
12 8000 Weekday
10 19000 Weekend
11 20000 Weekend
12 5000 Weekend

我想要每个商店和工作日的平均值,我可以使用以下方法获得:

SELECT AVG(Sales) AS weekday_avg, store
FROM store_sales
WHERE Weekday = 'Weekday'
GROUP BY store;

但是我想将这些结果添加到相同的 table 并存储在名为 'weekday_avg' 的列中。

我已经尝试了以下方法,虽然我没有收到错误,但该列没有添加任何值:

ALTER TABLE store_sales ADD COLUMN weekday_avg numeric;
UPDATE store_sales SET weekday_avg = (
    SELECT AVG(Sales) AS weekday_avg
    FROM store_sales
    WHERE Weekday = 'Weekday'
    GROUP BY store
);

我知道这可能不是最佳数据库实践,但我正在使用已提供的内容,我所需要的只是以 table 结束,其中包含每个商店/工作日类型的平均值列我可以导出到 R 中进行进一步分析。

非常感谢!

不存储值。它们很容易即时计算:

select ss.*,
       avg(sales) over (partition by store, weekday) as weekday_avg_sales
from store_sales ss;

也许如果您有一个非常大的 table,您可能想要存储汇总值。但即便如此,我还是会推荐第二个 table 用于摘要和连接。有了索引,效率会高很多。

请注意,动态计算数据意味着在更新现有数据或插入新数据时它始终是最新的。

如其他答案中所述,不要将计算值存储在 table 中。

但是如果您想知道如何做到这一点,那么其中一种选择是使用相关查询,如下所示:

UPDATE store_sales s SET s.weekday_avg = (
    SELECT AVG(ss.Sales) AS weekday_avg
    FROM store_sales ss
    WHERE s.Weekday = ss.weekday
      And ss.store=s.store
);