我正在使用 SQLite 并尝试通过 ID 查找商品的平均交易价格。我正在尝试使用表 B 中该特定公司(由 id 标识)的季度所有交易的平均价格来更新 A.avg_price。我尝试了以下查询,但它运行了一个多小时,但没有成功 -所以我想我做了一些低效的事情。我是 SQL 新手,因此非常感谢您的帮助!
UPDATE "Table_A" AS A Set "avg_price" = (SELECT AVG ("price") FROM "Table_B" AS B WHERE A."id" = B."id")
TABLE_A
公司编号 | 平均价格 |
---|---|
1. | 空 |
2. | 空 |
TABLE_B
公司编号 | 日期 | 价格 |
---|---|---|
1. | 1/1/23 | 10 美元 |
1. | 1/4/23 | 12 美元 |
2. | 1/4/23 | 14 美元 |
2. | 1/10/23 | 2 美元 |
3. | 1/5/23 | 15 美元 |
1. | 1/4/23 | 8 美元 |
3. | 1/20/23 | 30 美元 |
表 A 的预期结果 |公司编号 |平均价格 | | ---------- | ---------- | | 1.| 10 美元 | | 2.| 8 美元 | | 3.| $22.5 |
查询更新表 A 中的“avg_price”列以包含每个公司的平均交易价格。它通过首先计算表 B 中每个公司的平均价格并将这些平均值存储在名为“B”的临时表中来实现此目的。然后,它使用公司 ID 将表 A 中的公司与“B”中相应的平均值进行匹配。最后,它用计算出的平均值更新表 A 中的“avg_price”,确保每个公司的平均价格正确反映在表 A 中。
UPDATE "Table_A" AS A
SET "avg_price" = B.avg_price
FROM (
SELECT "id", AVG("price") AS avg_price
FROM "Table_B"
GROUP BY "id"
) AS B
WHERE A."id" = B."id";