Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - COUNT condicional com GROUP BY


Se droid_v puder ser apenas 0, 1, 2, 3 ou 4, COUNT(DISTINCT) nunca retornará mais de 5, pois existem apenas cinco valores possíveis. É isso que você quer? Se sim, então tente isso:
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

Atualização: Ops, desculpe, o acima não está certo, pois pode não estar um zero. Deve ser:
SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid

Se, por outro lado, você deseja uma contagem de todas as linhas em que droid_v> 0, acho que você deseja isso:
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 isto ajude.