问题描述
我正在尝试将查询结果添加到现有表中,具体取决于现有列的值。例如,使用下表
商店 | 销售 | 工作日 |
---|---|---|
10 | 11000 | 工作日 |
11 | 5000 | 工作日 |
12 | 8000 | 工作日 |
10 | 19000 | 周末 |
11 | 20000 | 周末 |
12 | 5000 | 周末 |
我想要每个商店和工作日的平均值,我可以使用以下方法获得:
SELECT AVG(Sales) AS weekday_avg,store
FROM store_sales
WHERE Weekday = 'Weekday'
GROUP BY store;
然后我想将这些结果添加到同一个表中并存储在名为“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
);
我知道这可能不是最佳数据库实践,但我正在使用所提供的内容,我所需要的只是最终得到一个表,其中包含每个商店/工作日类型的平均值,我可以将其导出到 R以供进一步分析。
非常感谢!
解决方法
不要存储值。它们很容易即时计算:
select ss.*,avg(sales) over (partition by store,weekday) as weekday_avg_sales
from store_sales ss;
也许如果您有一个非常大的表,您可能想要存储汇总值。但即便如此,我还是建议为汇总和联接使用第二个表。使用索引,效率会更高。
请注意,动态计算数据意味着在更新现有数据或插入新数据时,数据始终是最新的。
,如其他答案所述,不要将计算值存储在表中。
但如果您想知道如何完成,那么其中一种选择是使用相关查询,如下所示:
.ipa