problème count avec la valeur 0
Bonjour,
dans ma table, je cherche à compter le nombre de personne lorsqu'une étape est validée (validation=true). Le résultat de la requête devrait être :
personne étape
personne1 5
personne2 3
personne3 4
J'ai utilisé cette requête :
SELECT carte.nomEtudiant, Count(carte.idSequence) AS nbSeqValide
FROM carte
GROUP BY carte.nomEtudiant, carte.validation
HAVING carte.validation=true;
Elle plante quand il n'y a pas d'enregistrement où validation=true (ce qui est normal). Le SGBD ne renvoie pas 0.
J'ai alors utilisé la requête suivante en imbriquant un SELECT
SELECT carte.nomEtudiant
(SELECT COUNT (carte.idSequence) FROM carte WHERE validation=true) AS nbSeqValide
FROM carte
GROUP BY nomEtudiant, validation;
Cette requête renvoie bien 0 quand il n'y a pas d'enregistrement où validation=true. Par contre, le problème c'est que je n'arrive plus à compter pour chaque personne. Est-ce que quelqu'un saurait comment compter les étapes réalisées pour chaque personne ?
Merci d'avance
Cristol
Re: problème count avec la valeur 0
Salut, et bienvenue sur ce forum,
Primo, tu n'es pas obligé de préfixer tous tes noms de champs par le nom de table, cela n'est utile que si plusieurs des tables ont des champs de même noms, auquel cas le SGBD te demande de déterminer l'appartenance du champ à une table.
Dans ton cas, tu utilises 2 fois la même table : il faut indiquer dans ta sous-requête que tu ne comptes que les enregistrements de l'étudiant concerné, donc utiliser les alias (ici A et B) pour le jointure.
Code:
1 2 3 4 5 6 7
| SELECT A.nomEtudiant
(SELECT COUNT (b.idSequence)
FROM carte b
WHERE b validation=true
AND A.nomEtudiant = B.nomEtudiant) AS nbSeqValide
FROM carte A
GROUP BY nomEtudiant, validation; |