Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - COUNT conditionnel avec GROUP BY

Si droid_v ne peut être que 0, 1, 2, 3 ou 4, alors COUNT(DISTINCT) ne renverra jamais plus de 5, car il n'y a que cinq valeurs possibles. Est-ce que c'est ce que tu veux? Si oui, essayez ceci :

SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v ELSE 0 END) - 1 AS droid /* -1 for the case where droid_v is 0 */
     , COUNT(DISTINCT sig_v) AS sig
     , SUM(NoExt)  AS hits

Mise à jour : Oups, désolé, ce qui précède n'est pas tout à fait correct car il pourrait ne pas exister un zéro. Il devrait être :

SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid

Si, d'un autre côté, vous voulez un décompte de toutes les lignes où droid_v> 0, alors je pense que vous voulez ceci :

SELECT puid, SUM(CASE WHEN droid_v > 0 THEN 1 ELSE 0 END) AS droid
     , COUNT(DISTINCT sig_v) AS sig
     , SUM(NoExt)  AS hits

J'espère que cela vous aidera.