PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL:Преминаване през редове на таблица с for цикъл, извличане на стойност на колона въз основа на текущия ред

За това нямате нужда от цикъл или дори функция.

Това, което искате да направите, може да бъде направено в един акт за актуализиране, тъй като общият брой на територия може да бъде изчислен с едно агрегиране:

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

След това това може да се използва като източник за актуализиране на таблицата на територията:

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;

Алтернатива, която може да бъде по-лесна за разбиране, но ще бъде по-бавна за по-големи таблици, е актуализация със свързана подзаявка

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

Има малка разлика между първата и втората актуализация:втората ще актуализира total_sales_person до 0 (нула) за тези територии, където изобщо няма продавач. Първият ще актуализира броя само за територии, които действително присъстват в таблицата на продавача.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. В Postgres, как да COUNT и WHERE в една и съща заявка, след което да направя математика за резултата?

  2. Грешка при използване на R за получаване на идентификационни данни от Windows Cred Vault

  3. Управление на друг PostgreSQL Commitfest

  4. Защита на ниво ред с помощта на Prisma и Postgres

  5. Експортирайте в CSV и компресирайте с GZIP в postgres