programing

창 기능을 사용하여 표의 열을 업데이트하는 방법

yellowcard 2023. 8. 18. 22:27
반응형

창 기능을 사용하여 표의 열을 업데이트하는 방법

MariaDB에는 서로 다른 노드로 구성된 테이블이 있으며, 각 노드는 여러 하드웨어 구성 요소를 가질 수 있으며, 각 노드가 몇 개의 하드웨어 구성 요소를 가지고 있는지 세어 한 열에 저장하려고 합니다.

따라서 "라는 빈 열을 만들었습니다.HW_Count".저는 아래 SELECT 문을 통해 이 계산을 할 수 있습니다.

SELECT NodeID,COUNT(NodeId) OVER (PARTITION BY NodeId) FROM Hardware AS HW_Count

다음 종류의 목록을 반환합니다.

 NodeID    HWCount
   1         33
   1         33
  ...        ...
   2         11
   2         11
  ...        ...

이제 하드웨어라는 테이블의 빈 열을 tihs 정보로 업데이트하고 싶은데 올바른 UPDATE 문을 어떻게 작성해야 할지 모르겠습니다.나는 그 노선에 따라 무언가를 하고 싶습니다.

UPDATE Hardware   
SET HW_count = 
COUNT(NodeId) OVER (PARTITION BY NodeId)

하지만 그것은 돌아옵니다.

"SQL ERROR (4015): Window function is allowed only in SELECT list and ORDER BY clause". 

내 열을 업데이트하는 올바른 방법은 무엇입니까?

감사합니다!

나는 간신히 답을 찾았습니다.

UPDATE Hardware, (SELECT NodeID,COUNT(NodeID) AS `HW_Count`  FROM 
Hardware GROUP BY NodeID) AS dummyTable
SET Hardware.hw_count = Dummytable.Hw_count
WHERE Hardware.NodeID= dummytable.NodeID

사용해 보십시오.

UPDATE H1
SET HW_count = (SELECT COUNT(*) HW_count FROM Hardware WHERE NodeID = H1.NodeID GROUP BY NodeID)
FROM Hardware H1
    INNER JOIN Hardware H2 ON H1.NodeID=H2.NodeID

다음을 사용하여 이 작업을 수행할 것을 권장합니다.JOIN그리고.GROUP BY:

UPDATE Hardware h JOIN
       (SELECT NodeID, COUNT(NodeID) AS new_hw_count
        FROM Hardware
        GROUP BY NodeID
       ) hh
       ON hh.NodeID = h.NodeID
    SET h.hw_count = h.new_hw_count;

언급URL : https://stackoverflow.com/questions/56847627/how-to-update-a-column-in-a-table-using-a-window-function

반응형