sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:iterar a través de las filas de una tabla con bucle for, recuperar el valor de la columna según la fila actual

No necesita un bucle o incluso una función para esto.

Lo que desea hacer se puede hacer en una sola declaración de actualización porque el recuento total por territorio se puede calcular con una sola agregación:

SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid

Esto se puede usar como fuente para actualizar la tabla de territorios:

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;

Una alternativa que podría ser más fácil de entender pero que será más lenta para tablas más grandes es una actualización con una subconsulta relacionada

UPDATE territory2_t tg
   SET total_sales_person = (select count(*) 
                             from salesperson_t sp
                             where sp.salesterritoryid = tg.territoryid);

Hay una ligera diferencia entre la primera y la segunda actualización:la segunda actualizará total_sales_person a 0 (cero) para aquellos territorios donde no hay ningún vendedor. El primero solo actualizará el recuento de los territorios que realmente están presentes en la tabla de vendedores.