PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:scorrere le righe di una tabella con ciclo for, recuperare il valore della colonna in base alla riga corrente

Non hai bisogno di un ciclo o anche di una funzione per questo.

Quello che vuoi fare può essere fatto in una singola dichiarazione di aggiornamento perché il conteggio totale per territorio può essere calcolato con un'unica aggregazione:

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

Questo può quindi essere utilizzato come fonte per aggiornare la tabella del territorio:

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;

Un'alternativa che potrebbe essere più facile da capire ma sarà più lenta per le tabelle più grandi è un aggiornamento con una sottoquery correlata

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

C'è una leggera differenza tra il primo e il secondo aggiornamento:il secondo aggiornerà total_sales_person a 0 (zero) per quei territori in cui non è presente alcun venditore. Il primo aggiornerà solo il conteggio dei territori che sono effettivamente presenti nella tabella del venditore.