我正在尝试将一个表中的计数、总和和平均值添加到另一个表中,但我最终为每个值查询了相同的数据。我正在使用 PostgreSQL。我正在将其转交给专家,以了解如何使此更新语句更有效率。在这里:
update "table1" set
"col1" = (SELECT COUNT(*) FROM "table2" WHERE "table2Id" = "table1"."table1Id"),
"col2" = (SELECT AVG("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id"),
"col3" = (SELECT SUM("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id");
我应该能够像这样运行一次子查询并访问更新的返回值,对吗?
SELECT COUNT(*), AVG("someCol"), SUM("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id";
非常感谢任何帮助。
最佳答案
尝试子查询:
UPDATE table1
SET col1 = YourCount, col2 = YourAverage, col3 = YourSum
FROM table1 t1
INNER JOIN (
SELECT table2Id, COUNT(*) AS YourCount, AVG(someCol1) YourAverage,
SUM(someCol2) YourSum
FROM table2
GROUP BY table2Id
) t2 ON t1.table1Id = t2.table2Id
关于sql - 我怎样才能让这条SQL更新语句更有效率呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526571/