복붙노트

[SQL] 는 SQL 업데이트 쿼리에서 집계 함수?

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를 지원하지 않습니다.

나는 이것을 알아야한다,하지만 내 마음은 빈 그리기입니다. 내가 무엇을 잘못하고 있지?

해결법

  1. ==============================

    1.

    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  
    
  2. ==============================

    2.사용하다:

    사용하다:

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

    3.또는 당신은 JBrooks 및 OMG 조랑말 답변을 혼합하여 사용할 수 있습니다 :

    또는 당신은 JBrooks 및 OMG 조랑말 답변을 혼합하여 사용할 수 있습니다 :

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

    4.좋은 상황은 CROSS APPLY가 사용하는

    좋은 상황은 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
    
  5. ==============================

    5.나는 문제가 SQL 서버 태그하지만 당신은 PostgreSQL을 사용하는 경우 가입에 UPDATE 조심해야한다 알고있다. @JBrooks 대답은 작동하지 않습니다 :

    나는 문제가 SQL 서버 태그하지만 당신은 PostgreSQL을 사용하는 경우 가입에 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  
    

    A와 PostgreSQL을 간주됩니다 FROM 자체 조인 이유를 얻을 수있는 문서에 매개 변수 from_list를 참조하십시오 https://www.postgresql.org/docs/9.5/static/sql-update.html#AEN89239

  6. ==============================

    6.당신은 또한 다음과 같은 CTE를 사용할 수 있습니다.

    당신은 또한 다음과 같은 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
    
  7. from https://stackoverflow.com/questions/2009927/aggregate-function-in-an-sql-update-query by cc-by-sa and MIT license