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 :

Compter même les valeurs à zéro (group by)


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 96
    Points
    96
    Par défaut Compter même les valeurs à zéro (group by)
    Bonjour,

    J'ai une question toute bête, je réalise par le biais d'une requête un comptage en utilisant un group by sur les années, comment fait-on pour renvoyer même les valeurs à zéro (d'une année)?

    voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(id) as data,date_part('YEAR',date_fin) as legend FROM public.anru_projet_perimetre 
    WHERE type_projet = 'Résidentialisation' GROUP BY date_part('YEAR',date_fin) ORDER BY date_part('YEAR',date_fin) ASC
    Ici seules les années ou il y a des enregistrements apparaissent dans le résultat.

    Merci pour votre aide !

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Il faut utiliser une table calendrier ou alors générer les années nécessaires pour la requête avec generate_series puis faire une jointure externe sur la table.

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 96
    Points
    96
    Par défaut
    Merci pour la réponse. J'ai recréé une table (calendrier) avec toutes les années souhaitées et fait la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) as data,date_part('YEAR',date_fin) as legend 
    FROM public.anru_projet_perimetre RIGHT JOIN f_anru.calendrier ON date_part('YEAR',date_fin) = f_anru.calendrier.annee 
    WHERE type_projet = 'Résidentialisation' GROUP BY date_part('YEAR',date_fin) ORDER BY date_part('YEAR',date_fin) ASC
    .. Je pensais quand mettant un right joint toutes les dates apparaîtraient , pour avoir les dates ou il n'y a pas de projets de résidentialisation avec un count à 0.

    Il faudrait peut être que je construise ma requête autrement mais je ne vois pas comment ...

  4. #4
    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,

    et comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT COUNT(*) AS DATA,f_anru.calendrier.annee AS legend 
    FROM public.anru_projet_perimetre RIGHT JOIN f_anru.calendrier ON date_part('YEAR',date_fin) = f_anru.calendrier.annee 
    WHERE type_projet = 'Résidentialisation' 
    GROUP BY f_anru.calendrier.annee 
    ORDER BY f_anru.calendrier.annee ASC

  5. #5
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 96
    Points
    96
    Par défaut
    Malheureusement non ;-(

    J'ai même essayé un general_series mais ça me donne toujours le même résultat ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT annee.date_fin as legend,COUNT(P.type_projet) as data  
    FROM generate_series(2004,2013) as annee(date_fin) 
    LEFT JOIN public.anru_projet_perimetre AS P ON annee.date_fin = date_part('YEAR',P.date_fin)
    WHERE P.type_projet = 'Résidentialisation' GROUP BY annee.date_fin,P.type_projet ORDER BY annee.date_fin ASC

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    with t as (
    select generate_series as annee 
      from generate_series(2004,2013)
    )
    SELECT t.annee AS legend, COUNT(P.type_projet) AS DATA  
      FROM t
      LEFT JOIN public.anru_projet_perimetre AS P ON t.annee = date_part('YEAR',P.date_fin)
     WHERE P.type_projet = 'Résidentialisation' 
     GROUP BY t.annee 
     ORDER BY t.annee ASC

  7. #7
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 96
    Points
    96
    Par défaut
    Trouvé !

    Il fallait juste supprimer le WHERE et mettre la condition comme suit ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(type_projet) AS legend,f_anru.calendrier.annee 
    FROM f_anru.calendrier LEFT OUTER JOIN public.anru_projet_perimetre ON f_anru.calendrier.annee = date_part('YEAR',date_fin) AND type_projet = 'Résidentialisation'
    GROUP BY f_anru.calendrier.annee
    ORDER BY f_anru.calendrier.annee ASC;

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par mcdelay Voir le message
    Il fallait juste supprimer le WHERE et mettre la condition comme suit ;
    Ah bah oui désolé...

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

Discussions similaires

  1. Cacher les valeurs zéro ?
    Par jondal dans le forum BIRT
    Réponses: 7
    Dernier message: 14/04/2016, 13h38
  2. [AC-2010] Ne pas afficher les valeurs zéro dans un formulaire
    Par Daejung dans le forum IHM
    Réponses: 6
    Dernier message: 08/07/2015, 20h05
  3. [Toutes versions] graphique avec les valeurs à zéro
    Par undo74 dans le forum Excel
    Réponses: 4
    Dernier message: 22/06/2015, 22h50
  4. [Toutes versions] supprimer les valeurs zéro
    Par iliesss dans le forum Excel
    Réponses: 5
    Dernier message: 26/09/2011, 23h14
  5. Réponses: 1
    Dernier message: 26/07/2009, 01h21

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