Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/12/2012, 23h30   #1
newbe-deve
Membre du Club
 
Homme Omar Belghiti Alaoui
Étudiant
Inscription : octobre 2010
Messages : 127
Détails du profil
Informations personnelles :
Nom : Homme Omar Belghiti Alaoui
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 127
Points : 44
Points : 44
Par défaut 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;
newbe-deve est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 12h07   #2
punkoff
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 2 154
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 2 154
Points : 3 486
Points : 3 486
bonjour,


ajouter la colonne goal average dans l'order by ?

Si elle n'existe pas il va falloir la calculer, faites ceci dans la sous requete existante.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 17h47   #3
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
Le tri par la différence du nombre de buts suppose d'avoir le score des rencontres dans une colonne.
Or dans la requête montrée on ne voit pas le nombre de buts.

Par ailleurs l'UNION est un peu curieuse, on dirait que ça compte deux fois les matchs nuls: une fois en tant que visiteur et une fois en tant qu'équipe locale.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 15h20   #4
newbe-deve
Membre du Club
 
Homme Omar Belghiti Alaoui
Étudiant
Inscription : octobre 2010
Messages : 127
Détails du profil
Informations personnelles :
Nom : Homme Omar Belghiti Alaoui
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 127
Points : 44
Points : 44
Citation:
Envoyé par estofilo Voir le message
Le tri par la différence du nombre de buts suppose d'avoir le score des rencontres dans une colonne.
Or dans la requête montrée on ne voit pas le nombre de buts.

Par ailleurs l'UNION est un peu curieuse, on dirait que ça compte deux fois les matchs nuls: une fois en tant que visiteur et une fois en tant qu'équipe locale.
Oui c'est ça pour avoir le nombre exact de buts pour chaque équipe il faut faire la somme quand ils sont locaux et aussi quand ils sont visiteurs

pour le goal average je ne vois pas comment l'intégrer puisque je le prends en compte sauf si les nombres de points sont égaux.
newbe-deve est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h59.


 
 
 
 
Partenaires

Hébergement Web