Utilisation de la fonction COUNT() avec des valeurs NULL - SQL/NoSQL - Programmation
Marsh Posté le 14-06-2016 à 20:08:06
La solution plus simple serait d'utiliser isnull ou ifnull selon le sgbdr utilisé.
Mysql :
IFNULL(COUNT(*), 0) |
Marsh Posté le 15-06-2016 à 11:17:16
Bonjour,
Merci pour ta réponse
bistouille a écrit : La solution plus simple serait d'utiliser isnull ou ifnull selon le sgbdr utilisé.
|
Du coup, ça ferait quelque chose dans ce goût là :
Code :
|
Et ... j'obtiens le même résultat, à savoir tous les agents à minima qui ont un support affecté, mais pas les agents sans support
Marsh Posté le 15-06-2016 à 11:34:31
A mon avis si tu veux tous les agents (même sans carte) tu devrais plutôt faire un GROUP BY agent.ID_agt, pour la comptabilisation le SUM(CASE WHEN support.ID_agt IS NULL THEN 0 ELSE 1 END) devrait faire l'affaire...
Si tu n'y arrives, pas essayes de créer un http://sqlfiddle.com/ et nous pourrons essayer de corriger ta requête...
Marsh Posté le 15-06-2016 à 15:30:07
Super ça fonctionne !
J'ai ajouté l'ID dans la sélection pour y ajouter le GROUP BY et c'est peut-être juste ce champ qui manquait pour qu'il fasse bien le détail entre les agents.
Donc pour info, la requête finale qui fonctionne :
Code :
|
Merci bien
Marsh Posté le 14-06-2016 à 17:17:34
Bonjour à tous,
Je m'excuse d'avance si certains trouvent la question idiote mais je n'arrive pas à solutionner ce problème, alors autant poser la question et apprendre.
Contexte :
J'ai une base de données avec 2 tables :
- une table reprenant des agents (ID_agt, nom, prénom)
- une table avec des supports (ID_sup, serialnumber, ID_agt)
Un agent est sensé n'avoir qu'un support mais dans le doute, je cherche à réaliser une requête qui renvoie :
- l'ensemble des agents (même ceux sans carte)
- avec un comptage du nombre de cartes qu'ils ont (0, 1, 2, ...)
Du coup, j'essaie ça :
Mon problème, c'est que dans la table des supports, un support qui n'a pas été attribué a une valeur NULL dans la colonne ID_agt. Du coup, avec la requête ci-dessus, les agents qui n'ont pas de support attribué ne sortent pas.
J'ai donc essayé de remplacer la valeur NULL par une valeur 0 de la sorte :
Nouveau problème: la valeur 0 étant un enregistrement, COUNT() la comptabilise. Et donc, tous mes agents sortent avec au minimum un support !!!
J'ai bien tenté de réaliser la même chose avec un SUM():
Mais j'ai dans ma base 16 agents différents qui ont le même nom et au final, la requête renvoie le nom et un comptage de 16 supports...
Bref, je ne m'en sors pas et un peu d'aide serait la bienvenue
Merci d'avance !