IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Traitement du résultat d'une requête avant le RETURNS TABLE (goal average)


Sujet :

Requêtes PostgreSQL

  1. #1
    Invité
    Invité(e)
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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;
    Dernière modification par ced ; 07/01/2013 à 16h50. Motif: Grammaire

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    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.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    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.

  4. #4
    Invité
    Invité(e)
    Par défaut
    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.
    Dernière modification par al1_24 ; 07/01/2013 à 14h14. Motif: Grammaire, orthographe

Discussions similaires

  1. Problème de traitement du résultat d'une requête
    Par tim04660 dans le forum Général Java
    Réponses: 2
    Dernier message: 22/04/2014, 09h00
  2. Arrondir le résultat d'une requête
    Par wautierp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/06/2004, 11h56
  3. Résultat d'une requête dans une variable...
    Par Hoegaarden dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/04/2004, 13h51
  4. Résultat d'une requète SQL
    Par camino dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2004, 15h22
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo