sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:Iterera genom en tabellrader med for loop, hämta kolumnvärde baserat på aktuell rad

Du behöver inte en slinga eller ens en funktion för detta.

Det du vill göra kan göras i en enda uppdateringssats eftersom det totala antalet per territorium kan beräknas med en enda aggregering:

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

Detta kan sedan användas som källa för att uppdatera territoriumtabellen:

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;

Ett alternativ som kan vara lättare att förstå men som är långsammare för större tabeller är en uppdatering med en samrelaterad underfråga

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

Det finns en liten skillnad mellan den första och andra uppdateringen:den andra kommer att uppdatera total_sales_person till 0 (noll) för de områden där det inte finns någon säljare alls. Den första uppdaterar bara antalet för territorier som faktiskt finns i säljartabellen.




  1. Är det möjligt att fånga ett brott mot främmande nyckel i postgres

  2. MariaDB JSON_REMOVE() Förklarad

  3. Anslutningspoolning för en Android-app som ansluter till en Postgresql DB

  4. Android OS och postgreSQL