1

あるテーブルから別のテーブルにカウント、合計、および平均の値を追加しようとしていますが、値ごとに同じデータをクエリすることになります。私は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";

どんな助けでも大歓迎です。

4

2 に答える 2

5

サブクエリを試してください:

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
于 2012-07-17T16:16:03.157 に答える
1

最近の (9.0+) バージョンの Postgresql では、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;
于 2012-07-17T18:57:06.013 に答える