Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - COUNT condizionale con GROUP BY

Se droid_v può essere solo 0, 1, 2, 3 o 4, COUNT(DISTINCT) non restituirà mai più di 5, poiché ci sono solo cinque valori possibili. È questo che vuoi? Se è così, prova questo:

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

Aggiornamento: Oops, mi dispiace, quanto sopra non è del tutto corretto in quanto potrebbe non essere uno zero. Dovrebbe essere:

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

Se, invece, vuoi un conteggio di tutte le righe in cui droid_v> 0, allora penso che tu voglia questo:

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

Spero che questo aiuti.