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

Hàm trong PostgreSQL để chèn từ bảng này sang bảng khác?

Bạn có thể giải quyết vấn đề này bằng SQL thuần túy, bạn không cần hàm cho việc này.

Điều tốt nhất là chia bộ sưu tập thống kê thành hai truy vấn riêng biệt, một truy vấn khi đội chơi trên sân nhà, một khi họ chơi trên sân khách. Đối với mỗi trò chơi tính điểm và số bàn thắng ghi được. Sau đó, UNION hai truy vấn đó và sử dụng nó như một truy vấn phụ để tính toán thống kê tổng thể:

SELECT
  eq.nom_equipo AS equipo,
  COUNT(p.*) AS partidos_jug,
  SUM(CASE WHEN p.puntos = 3 THEN 1 ELSE 0 END) partidos_gana,
  SUM(CASE WHEN p.puntos = 1 THEN 1 ELSE 0 END) partidos_emp,
  SUM(CASE WHEN p.puntos = 0 THEN 1 ELSE 0 END) partidos_perd,
  SUM(p.puntos) AS puntos,
  SUM(p.goles) AS goles_favor
FROM equipos eq
JOIN (
  -- Playing at home
  SELECT
    num_eqpo_loc AS eqpo, 
    CASE WHEN (goles_loc > goles_vis) THEN 3
         WHEN (goles_loc = goles_vis) THEN 1
         ELSE 0
    END AS puntos,
    goles_loc AS goles
  FROM partidos
  UNION
  -- Playing away
  SELECT
    num_eqpo_vis AS eqpo, 
    CASE WHEN (goles_vis > goles_loc) THEN 3
         WHEN (goles_vis = goles_loc) THEN 1
         ELSE 0
    END AS puntos,
    goles_vis AS goles
  FROM partidos) AS p ON p.eqpo = eq.num_eqpo
GROUP BY equipo
ORDER BY puntos DESC, partidos_jug ASC, goles_favor DESC;

Điều này đặc biệt không nhanh do CASE nhưng sẽ nhanh hơn so với việc sử dụng một thủ tục và một vòng lặp.

Thay vì đặt kết quả của truy vấn này vào một bảng, tôi khuyên bạn nên CREATE VIEW general AS ... với truy vấn trên. Trong trường hợp đó, bạn luôn nhận được kết quả mới nhất khi bạn SELECT * FROM general và bạn không cần phải TRUNCATE bảng tổng quát trước khi chạy truy vấn (thêm kết quả mới với dữ liệu trong bảng sẽ vi phạm ràng buộc PK). Nếu bạn thực sự cần bảng, hãy sử dụng SELECT ... INTO general FROM ... trong truy vấn ở trên.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để truyền tham số vào một hàm postgre và lấy dữ liệu bằng ExecuteReader?

  2. postgres không biết tìm tệp cấu hình máy chủ ở đâu

  3. PostgreSQL không thể bắt đầu / kết thúc giao dịch trong PL / pgSQL

  4. Lấy dữ liệu từ PostgreSQL bằng Powershell

  5. Nhóm theo ngày ngắn trong JPA