MySQL - à condition que le compte du GROUPE PAR
Je suis en train d'affiner une requête que j'utilise actuellement:
SELECT `puid`,
COUNT(DISTINCT `droid_v`) AS DROID,
COUNT(DISTINCT `sig_v`) AS sig,
SUM(NoExt) AS hits
FROM temp
GROUP BY `puid`
Et j'ai besoin de l'obtenir pour seulement prendre en compte les droid_v
où droid_V
est plus grand que 0. Est-il possible à condition de le comte de cette façon? Pour le moment, c'est le comptage à zéro les valeurs que dénombrable, et je ne peux pas vraiment changer les zéros à null
valeurs.
Je n'ai pas besoin de connaître la valeur du nombre de droid_V
= 0, j'ai seulement besoin de les compter si il a un nombre supérieur à 0. Ce nombre va toujours être 0, 1, 2, 3, ou 4.
J'ai essayé:
SELECT `puid`,
COUNT(DISTINCT CASE WHEN `droid_v` > 0 THEN 1 END) AS DROID,
COUNT(DISTINCT `sig_v`) AS sig,
SUM(`NoExt`) AS hits
FROM temp
GROUP BY `puid`
Mais cela donne un résultat binaire (0 ou 1) de ne pas les compter, je suis dans l'attente.
exemple de sortie =
puid DROID sig hits
No PUID 1 1 252
x-fmt/92 1 5 1008
prévu de sortie:
puid DROID sig hits
No PUID 1 1 252
x-fmt/92 3 5 1008
Des données de l'échantillon:
id;puid;droid_v;sig_v;speed;Ext;NoExt;tally
1;"No PUID";"3";"v13";"SLOW";"0";"63";"63"
2;"x-fmt/92";"3";"v13";"SLOW";"63";"0";"63"
3;"x-fmt/92";"3";"v37";"SLOW";"63";"63";"126"
4;"x-fmt/92";"3";"v45";"SLOW";"63";"63";"126"
5;"x-fmt/92";"3";"v49";"SLOW";"63";"63";"126"
6;"x-fmt/92";"3";"v50";"SLOW";"63";"63";"126"
7;"x-fmt/92";"5";"v13";"SLOW";"63";"0";"63"
8;"No PUID";"5";"v13";"SLOW";"0";"63";"63"
9;"x-fmt/92";"5";"v37";"SLOW";"63";"63";"126"
10;"x-fmt/92";"5";"v45";"SLOW";"63";"63";"126"
11;"x-fmt/92";"5";"v49";"SLOW";"63";"63";"126"
12;"x-fmt/92";"5";"v50";"SLOW";"63";"63";"126"
13;"No PUID";"6";"v13";"FAST";"0";"63";"63"
14;"x-fmt/92";"6";"v13";"SLOW";"63";"0";"63"
15;"No PUID";"6";"v13";"SLOW";"0";"63";"63"
16;"x-fmt/92";"6";"v13";"FAST";"63";"0";"63"
17;"x-fmt/92";"6";"v37";"SLOW";"63";"63";"126"
18;"x-fmt/92";"6";"v37";"FAST";"63";"63";"126"
19;"x-fmt/92";"6";"v45";"FAST";"63";"63";"126"
20;"x-fmt/92";"6";"v45";"SLOW";"63";"63";"126"
21;"x-fmt/92";"6";"v49";"FAST";"63";"63";"126"
22;"x-fmt/92";"6";"v49";"SLOW";"63";"63";"126"
23;"x-fmt/92";"6";"v50";"FAST";"63";"63";"126"
24;"x-fmt/92";"6";"v50";"SLOW";"63";"63";"126"
- pouvez-vous ajouter un
WHERE
clause? - à partir de l'exemple fourni par vous, quel est votre résultat attendu?
Vous devez vous connecter pour publier un commentaire.
Si droid_v ne peut être 0, 1, 2, 3, ou 4, puis COUNT(DISTINCT) ne retournera jamais plus de 5, il n'y a que cinq valeurs possibles. Est-ce que vous voulez? Si oui, alors essayez ceci:
Mise à jour: Oups, désolé, le ci-dessus n'est pas tout à fait juste qu'il ne pourrait pas être un zéro.
Il doit être:
Si, d'autre part, vous voulez un nombre de toutes les lignes où droid_v > 0, alors je pense que vous voulez que cela:
Espère que cette aide.
Il suffit d'utiliser une somme
donc, si vous souhaitez quelque chose de vérifier cela
simple que cela 😀
C'est la solution la plus simple je pense:
Cependant, il n'est pas clair si vous voulez compter les distincts ou non. Si vous voulez compter les valeurs distinctes alors:
ajouter à la requête