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.