PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL:Lặp lại các hàng trong bảng với vòng lặp for, truy xuất giá trị cột dựa trên hàng hiện tại

Bạn không cần một vòng lặp hoặc thậm chí một hàm cho việc này.

Những gì bạn muốn làm có thể được thực hiện trong một câu lệnh cập nhật vì tổng số trên mỗi lãnh thổ có thể được tính bằng một tổng hợp duy nhất:

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

Sau đó, đây có thể được sử dụng làm nguồn để cập nhật bảng lãnh thổ:

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;

Một giải pháp thay thế có thể dễ hiểu hơn nhưng sẽ chậm hơn đối với các bảng lớn hơn là cập nhật với truy vấn phụ cùng liên quan

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

Có một chút khác biệt giữa bản cập nhật đầu tiên và thứ hai:bản thứ hai sẽ cập nhật total_sales_woman thành 0 (không) đối với những lãnh thổ không có nhân viên bán hàng nào cả. Cái đầu tiên sẽ chỉ cập nhật số lượng cho các lãnh thổ thực sự có trong bảng nhân viên bán hàng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đặt đường dẫn nút cho nodejs (Ubuntu)

  2. Xuất kết quả truy vấn từ BigQuery sang Postgres

  3. postgres:lấy n lần xuất hiện hàng đầu của một giá trị trong mỗi nhóm

  4. Cải thiện hiệu suất truy vấn PostgreSQL khi rời tham gia cho 100 triệu dữ liệu

  5. Cách cập nhật nhiều cột trong PostgreSQL