sql >> Base de Datos >  >> RDS >> Mysql

MySQL - COUNT condicional con GROUP BY

Si droid_v solo puede ser 0, 1, 2, 3 o 4, COUNT(DISTINCT) nunca devolverá más de 5, ya que solo hay cinco valores posibles. ¿Es eso lo que quieres? Si es así, intente esto:

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

Actualización: Vaya, lo siento, lo anterior no es del todo correcto, ya que podría no ser un cero. Debería ser:

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

Si, por otro lado, desea contar todas las filas donde droid_v> 0, entonces creo que desea esto:

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

Espero que esto ayude.