PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL:Iteruj przez wiersze tabeli z pętlą for, pobieraj wartość kolumny na podstawie bieżącego wiersza

Nie potrzebujesz do tego pętli ani nawet funkcji.

To, co chcesz zrobić, można zrobić w jednej instrukcji aktualizacji, ponieważ całkowitą liczbę na terytorium można obliczyć za pomocą jednej agregacji:

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

Można to następnie wykorzystać jako źródło do aktualizacji tabeli terytorium:

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;

Alternatywą, która może być łatwiejsza do zrozumienia, ale będzie wolniejsza w przypadku większych tabel, jest aktualizacja z powiązanym podzapytaniem

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

Istnieje niewielka różnica między pierwszą a drugą aktualizacją:druga zaktualizuje total_sales_person do 0 (zero) dla terytoriów, na których w ogóle nie ma sprzedawcy. Pierwszy z nich zaktualizuje tylko liczbę dla terytoriów, które są faktycznie obecne w tabeli sprzedawcy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolumna SELECT AS nie istnieje w klauzuli WHERE

  2. Nie znaleziono sterownika postgresql JDBC w projekcie Android

  3. Jak stworzyć bazę danych za pomocą flyway?

  4. Ef rdzeń 5 wiele do wielu filtrów

  5. Dlaczego na świecie miałbym mieć wiele związków?