Как обновить столбец в таблице с помощью оконной функции - PullRequest
0 голосов
/ 02 июля 2019

У меня есть таблица в 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
  ...        ...

Теперь я хочу ОБНОВИТЬ пустой столбец в таблице под названием Оборудование с информацией о них, но я не уверен, как написать правильную инструкцию 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". 

Как правильно обновить мой столбец?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

Попробуйте, пожалуйста:

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
0 голосов
/ 02 июля 2019

Я бы рекомендовал сделать это, используя 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;
0 голосов
/ 02 июля 2019

Мне удалось найти ответ

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