簡體   English   中英

如何使此SQL更新語句更有效?

[英]How can I make this SQL update statement more efficient?

我試圖將一個表的計數,總和和平均值添加到另一個表中,但是最終我為每個值查詢了相同的數據。 我正在使用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

我相信在Postgresql的最新(9.0+)版本中,可以使用CTE進行更簡潔的查詢。

WITH calculations AS 
   (SELECT table2ID, COUNT(*) AS n, SUM(someCol) AS s, AVG(someCol) AS a
    FROM table2
    GROUP BY table2ID)
UPDATE table1
SET col1=n, col2=s, col3=a
FROM calculations WHERE calculations.table2ID=table1.table1ID;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM