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

Fungsi di PostgreSQL untuk menyisipkan dari satu tabel ke tabel lainnya?

Anda dapat memecahkan masalah ini dalam SQL murni, Anda tidak memerlukan fungsi untuk ini.

Hal terbaik adalah memecah kumpulan statistik menjadi dua kueri berbeda, satu untuk saat tim bermain di kandang, satu saat mereka bermain tandang. Untuk setiap pertandingan, hitung poin dan gol yang dicetak. Kemudian UNION dua kueri itu dan gunakan itu sebagai subkueri untuk menghitung statistik keseluruhan:

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;

Ini tidak terlalu cepat karena CASE pernyataan, tetapi akan lebih cepat daripada menggunakan prosedur dan loop.

Alih-alih memasukkan hasil kueri ini ke dalam tabel, saya sarankan Anda CREATE VIEW general AS ... dengan pertanyaan di atas. Dalam hal ini Anda selalu mendapatkan hasil terbaru saat Anda SELECT * FROM general dan Anda tidak perlu TRUNCATE tabel umum sebelum menjalankan kueri (menambahkan hasil baru dengan data dalam tabel akan melanggar batasan PK). Jika Anda benar-benar membutuhkan tabel, gunakan SELECT ... INTO general FROM ... dalam kueri di atas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan Rails/Postgresql SQL dengan Tanggal

  2. PostgreSQL:Menampilkan tabel di PostgreSQL

  3. Bagaimana saya bisa bergabung dengan tabel turunan?

  4. Bagaimana cara menguji entri crontab?

  5. Spring Batch - Tidak dapat membuat tabel metadata di Postgres dan memuat data aktual ke mysql