PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL:itere através de linhas de tabelas com loop for, recupere o valor da coluna com base na linha atual


Você não precisa de um loop ou mesmo de uma função para isso.

O que você deseja fazer pode ser feito em uma única instrução de atualização porque a contagem total por território pode ser calculada com uma única agregação:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid

Isso pode ser usado como fonte para atualizar a tabela de territórios:
UPDATE territory2_t
   SET total_sales_person = t.total_count
FROM (
   SELECT salesterritoryid, count(*) as total_count
   FROM salesperson_t
   group by salesterritoryid
) t 
WHERE territoryid = t.salesterritoryid;

Uma alternativa que pode ser mais fácil de entender, mas será mais lenta para tabelas maiores é uma atualização com uma subconsulta co-relacionada
UPDATE territory2_t tg
   SET total_sales_person = (select count(*) 
                             from salesperson_t sp
                             where sp.salesterritoryid = tg.territoryid);

Há uma pequena diferença entre a primeira e a segunda atualização:a segunda atualizará o total_sales_person para 0 (zero) para os territórios onde não há nenhum vendedor. O primeiro só atualizará a contagem dos territórios que estão realmente presentes na tabela do vendedor.