sql - 我怎样才能让这条SQL更新语句更有效率呢?

标签 sql postgresql aggregate-functions

我正在尝试将一个表中的计数、总和和平均值添加到另一个表中,但我最终为每个值查询了相同的数据。我正在使用 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/

相关文章:

arrays - 在数组上聚合函数

sql - jOOQ "EXTRACT(EPOCH FROM [field])"解决方法?

sql - 如何使包装器返回 ref cursor 以外的东西

mysql - 如何在SQL中选择需要的信息?

postgresql - CTE 执行命令

sql - Oracle SQL-按周汇总和分组数据

mysql - 不同条件下的合计值

mysql - 根据其他表的条件从表中选择

php - Laravel groupBy 无法与 PostgreSQL 正常工作

postgresql - 使用来自 VALUES 表达式的输入更新列,无需显式类型转换