Traitement du résultat d'une requête avant le RETURNS TABLE (goal average)
Bonjour,
voici une fonction qui me renvoie le résultat de
Code:
SELECT * FROM classement WHERE nat_poule = $1;
mais le problème c'est que si dans ce résultat j'ai deux equipes qui ont le même nombre de points donc je dois les trier en utilisant le goal average. Mais pour cela, il faut que je traite le résultat avant de le retourner. SVP, comment puis-je procéder ?
Code:
1 2 3 4 5 6
| CREATE OR REPLACE FUNCTION classPoule(pool char) RETURNS TABLE(poole classement2.poule%TYPE, nom classement2.equipe%TYPE,
pointe classement2.point, victoire classement2.classement%TYPE) AS $$
BEGIN
RETURN QUERY SELECT * FROM classement2 WHERE poule= $1;
END
$$ LANGUAGE 'plpgsql'; |
Voici la vue classement2:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| CREATE OR REPLACE VIEW classement2 AS
SELECT tabl.poule, tabl.equipe, sum(tabl.point) AS point_total,
rank() OVER (PARTITION BY tabl.poule ORDER BY sum(tabl.point) DESC) AS classement
FROM ( SELECT eq.equ_poule AS poule, eq.equ_nom AS equipe,
sum(
CASE
WHEN ma.mat_resu = '1'::bpchar THEN 3
WHEN ma.mat_resu = 'N'::bpchar THEN 1
ELSE 0
END) AS point
FROM equipe eq, match ma
WHERE ma.mat_locaux = eq.equ_id
GROUP BY eq.equ_nom, eq.equ_poule
UNION ALL
SELECT eq.equ_poule AS poule, eq.equ_nom AS equipe,
sum(
CASE
WHEN ma.mat_resu = '2'::bpchar THEN 3
WHEN ma.mat_resu = 'N'::bpchar THEN 1
ELSE 0
END) AS point
FROM equipe eq, match ma
WHERE ma.mat_visiteurs = eq.equ_id
GROUP BY eq.equ_nom, eq.equ_poule) tabl
GROUP BY tabl.equipe, tabl.poule
ORDER BY tabl.poule, sum(tabl.point) DESC; |