[sql] SQL 업데이트 쿼리의 집계 함수?

한 테이블의 값을 다른 테이블의 값의 합계로 설정하려고합니다. 이 라인을 따라 뭔가 :

UPDATE table1
SET field1 = SUM(table2.field2)
FROM table1
INNER JOIN table2 ON table1.field3 = table2.field3
GROUP BY table1.field3

물론 이것이 의미하는 것처럼 작동 SET하지 않습니다. 지원 SUM하지 않으며 지원하지 않습니다 GROUP BY.

나는 이것을 알아야하지만 내 마음은 공백을 그려 내고있다. 내가 뭘 잘못하고 있죠?



답변

UPDATE t1
SET t1.field1 = t2.field2Sum
FROM table1 t1
INNER JOIN (select field3, sum(field2) as field2Sum
   from table2
  group by field3) as t2
on t2.field3 = t1.field3  


답변

사용하다:

UPDATE table1
   SET field1 = (SELECT SUM(t2.field2)
                   FROM TABLE2 t2
                  WHERE t2.field3 = field2)


답변

또는 JBrooksOMG Ponies 답변을 혼합하여 사용할 수 있습니다 .

UPDATE table1
   SET field1 = (SELECT SUM(field2)
                   FROM table2 AS t2
                  WHERE t2.field3 = t1.field3)
  FROM table1 AS t1


답변

CROSS APPLY를 사용하기에 좋은 상황

UPDATE t1
   SET t1.field1 = t2.field2Sum
  FROM table1 t1
 CROSS APPLY (SELECT SUM(field2) as field2Sum
                FROM table2 t2
               WHERE t2.field3 = t1.field3) AS t2


답변

질문에 SQL Server 태그가 있다는 것을 알고 있지만 PostgreSQL을 사용하는 경우 JOIN으로 UPDATE에주의하십시오 . @JBrooks 답변이 작동하지 않습니다.

UPDATE t1
SET t1.field1 = t2.field2Sum
FROM table1 t1
INNER JOIN (...) as t2
on t2.field3 = t1.field3  

다음 사항에 맞게 조정해야합니다.

UPDATE table1 t1
SET t1.field1 = t2.field2Sum
FROM (...) as t2
WHERE t2.field3 = t1.field3  

PostgreSQL에서 자체 조인으로 간주되는 from_list이유를 확인하려면 문서의 매개 변수 를 참조하십시오 FROM. https://www.postgresql.org/docs/9.5/static/sql-update.html#AEN89239


답변

아래와 같이 CTE를 사용할 수도 있습니다.

;WITH t2 AS (
    SELECT field3, SUM(field2) AS field2
    FROM table2
    GROUP BY field3
)
UPDATE table1
SET table1.field1 = t2.field2
FROM table1
INNER JOIN t2 ON table1.field3 = t2.field3


답변