PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL:Iterasi melalui baris tabel dengan for loop, ambil nilai kolom berdasarkan baris saat ini

Anda tidak perlu loop atau bahkan fungsi untuk ini.

Apa yang ingin Anda lakukan dapat dilakukan dalam satu pernyataan pembaruan karena jumlah total per wilayah dapat dihitung dengan satu agregasi:

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

Ini kemudian dapat digunakan sebagai sumber untuk memperbarui tabel wilayah:

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;

Alternatif yang mungkin lebih mudah dipahami tetapi akan lebih lambat untuk tabel yang lebih besar adalah pembaruan dengan sub-kueri terkait

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

Ada sedikit perbedaan antara update pertama dan kedua:update kedua akan mengupdate total_sales_person menjadi 0 (nol) untuk wilayah di mana tidak ada tenaga penjual sama sekali. Yang pertama hanya akan memperbarui jumlah wilayah yang benar-benar ada di tabel staf penjualan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy with_for_update penguncian baris tidak berfungsi?

  2. PILIH atau PERFORM dalam fungsi PL/pgSQL

  3. Postgresql membuang nilai nol di kolom melanggar batasan bukan nol saat menggunakan hubungan oneToMany di JPA

  4. Buat skema jika tidak ada dengan menggunakan spring Jpa dengan hibernate

  5. tanggal kolom tidak dapat dilemparkan secara otomatis untuk mengetikkan cap waktu dengan zona waktu Django/postgres