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

PostgreSQL:Iterer gennem en tabelrækker med for loop, hent kolonneværdi baseret på den aktuelle række

Du behøver ikke en loop eller endda en funktion til dette.

Det, du vil gøre, kan gøres i en enkelt opdateringserklæring, fordi det samlede antal pr. område kan beregnes med en enkelt aggregering:

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

Denne kan derefter bruges som kilde til at opdatere territorietabellen:

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;

Et alternativ, der måske er lettere at forstå, men som vil være langsommere for større tabeller, er en opdatering med en co-relateret underforespørgsel

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

Der er en lille forskel mellem den første og anden opdatering:den anden opdaterer total_sales_person til 0 (nul) for de områder, hvor der slet ikke er nogen sælger. Den første opdaterer kun antallet af områder, der faktisk er til stede i sælgertabellen.




  1. Sammenføjning af tabeller fra forskellige databaser

  2. skal returnere to sæt data med to forskellige where-klausuler

  3. SQL vælg gruppe efter og string concat

  4. php slet linksrækker fra mysql-databasen