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

PostgreSQL Discussion :

Valeur count 0 par prise en compte [9.1]


Sujet :

PostgreSQL

  1. #1
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut Valeur count 0 par prise en compte
    Bonjour,

    Je fais une requête avec un count et les valeurs à zero ne se trouvent pas dans le tableau de resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(*) as data, gs.a as legend
     FROM resultat RIGHT JOIN generate_series(1,49,1) as gs(a) ON (b_1 = gs.a OR b_2 = gs.a OR b_3 = gs.a OR b_4 = gs.a OR b_5 = gs.a) 
    WHERE resultat.date >= (NOW() - '3 MONTHS'::INTERVAL) GROUP BY gs.a 
    ORDER BY gs.a
    Pourtant je mets bien une jointure me permettant d'afficher tous les chiffres de 1 à 49 (RIGHT JOIN).

    Je ne comprends pas trop, si vous avez une idée !

    Merci

    SD

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    2 erreurs :
    • le filtre sur resultat supprime les séries sans correspondance : Jointure externe et condition de restriction.
    • count(*) compte les lignes et il y aura bien toujours une ligne, vous devez utiliser count(colonne) qui ne compte pas les NULLs

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    C'est votre filtre dans la clause WHERE qui casse la jointure externe, vous ne permettez plus les nulls avec ce filtre. Il faut le remonter dans la clause de jointure.

    De même, il ne faut pas compter les étoiles, mais une colonne non nullable de la table resultat.
    Car avec count(*), vous comptez la ligne mais vous en générez au moins une avec le generate_series, vous aurez donc toujours au moins 1 comme résultat.

    Pour finir, j'ai simplifié l'écriture de votre jointure, mais c'est purement syntaxique.

    Ces remarques cumulées donnent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        SELECT gs.a AS legend
             , count(resultat.date) AS DATA
          FROM resultat
    RIGHT JOIN generate_series(1,49,1) AS gs(a)
            ON gs.a IN (b_1, b_2, b_3, b_4, b_5)
           AND resultat.date >= (NOW() - '3 MONTHS'::INTERVAL)
      GROUP BY gs.a 
      ORDER BY gs.a;

  4. #4
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    ooups erreur de débutant, j'avais pourtant fait des requêtes en ne mettant pas la condition dans la clause WHERE ... merci encore pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/09/2015, 17h37
  2. [2.x] [Twig] Valeur de parametre non prise en compte
    Par casta15 dans le forum Symfony
    Réponses: 0
    Dernier message: 30/09/2012, 19h03
  3. Valeur au clavier non prise en compte
    Par benstan dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 03/06/2011, 11h39
  4. Réponses: 1
    Dernier message: 06/08/2008, 15h58
  5. [VBA-A] valeur non prise en compte par un composant
    Par robert_trudel dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/07/2006, 22h25

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