Bonjour,
voici une fonction qui me renvoie le résultat demais 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 : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM classement WHERE nat_poule = $1;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Partager