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

Langage SQL Discussion :

COUNT sans perdre les valeurs NULL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1
    Par défaut COUNT sans perdre les valeurs NULL
    Bonjour,

    J'ai la requête suivante (je suis sous PostGreSQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT a.decid, COUNT(DISTINCT(c.matric))
    FROM djs a
    LEFT JOIN pho b ON (a.decid = b.decid)
    LEFT JOIN persvar c ON (b.phoid = c.phoid)
    WHERE c.dsitud <= CURRENT_DATE
    AND c.dsituf >= CURRENT_DATE
    AND c.dsort > CURRENT_DATE
    GROUP BY a.decid;
    Je souhaiterais que la requête retourne "0" pour chaque "a.decid" ce qui n'est pas le cas actuellement.

    Voici ce que j'ai essayé mais cela ne fonctionne pas :
    SELECT a.decid, COALESCE(COUNT(DISTINCT(c.matric)),0)
    SELECT a.decid, NULLIF(COUNT(DISTINCT(c.matric)), 0)

    Merci par avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Tu dois mettre les conditions dans le LEFT JOIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT a.decid, COUNT(DISTINCT(c.matric))
    FROM djs a
    LEFT JOIN pho b ON (a.decid = b.decid)
    LEFT JOIN persvar c ON (b.phoid = c.phoid AND c.dsitud <= CURRENT_DATE AND c.dsituf >= CURRENT_DATE AND c.dsort > CURRENT_DATE)
    GROUP BY a.decid;

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 600
    Billets dans le blog
    10
    Par défaut
    C'est un piège classique : mettre une restriction sur une colonne d'une table externe transforme implicitement la jointure externe en jointure interne !
    Pour éviter cet écueil, il faut suivre le conseil de Vanagreg en déportant la restriction dans la condition de jointure de la table externe concernée.

    EDIT une remarque à propos du titre de ce fil de discussion :
    "conserver les valeurs NULL" est un contresens. "NULL" n'est pas une valeur, mais au contraire un marqueur d'absence de valeur.

Discussions similaires

  1. [MySQL] Requête calcul moyenne sans les valeurs NULL
    Par Delba146 dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 17/12/2023, 12h32
  2. Faire un paréto sans les valeurs nulles
    Par salseropom dans le forum Excel
    Réponses: 3
    Dernier message: 14/04/2020, 14h16
  3. [MySQL-5.7] Retourner les valeurs nulles via COUNT + GROUP BY
    Par Luxor dans le forum Requêtes
    Réponses: 12
    Dernier message: 11/04/2017, 20h45
  4. Réponses: 8
    Dernier message: 05/08/2016, 11h27
  5. order by sans les valeurs NULL
    Par pendragon509 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/10/2005, 12h31

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