158 votes

COUNT DISTINCT avec CONDITIONS

Je veux compter le nombre d'éléments distincts dans une colonne sous réserve d'une certaine condition, par exemple si la table est comme ceci :

tag | entryID
----+---------
foo | 0
foo | 0
bar | 3

Si je veux compter le nombre de balises distinctes comme "nombre de balises" et compter le nombre de balises distinctes avec une entrée id > 0 comme "nombre de balises positives" dans la même table, que dois-je faire ?

Je compte maintenant à partir de deux tableaux différents où, dans le second tableau, je n'ai sélectionné que les lignes dont l'ID d'entrée est supérieur à zéro. Je pense qu'il devrait y avoir un moyen plus compact de résoudre ce problème.

0voto

BrianC Points 316

Cela peut aussi fonctionner :

SELECT 
    COUNT(DISTINCT T.tag) as DistinctTag,
    COUNT(DISTINCT T2.tag) as DistinctPositiveTag
FROM Table T
    LEFT JOIN Table T2 ON T.tag = T2.tag AND T.entryID = T2.entryID AND T2.entryID > 0

Vous avez besoin de la condition entryID dans la jointure gauche plutôt que dans une clause where afin de vous assurer que tous les éléments qui ont seulement un entryID de 0 sont correctement comptés dans le premier DISTINCT.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X