Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Bedingtes COUNT mit GROUP BY

Wenn droid_v nur 0, 1, 2, 3 oder 4 sein kann, gibt COUNT(DISTINCT) niemals mehr als 5 zurück, da es nur fünf mögliche Werte gibt. Ist es das was du willst? Wenn ja, dann versuchen Sie Folgendes:

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

Aktualisierung: Hoppla, tut mir leid, das Obige ist nicht ganz richtig, da es möglicherweise nicht ist eine Null. Es sollte sein:

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

Wenn Sie andererseits alle Zeilen zählen möchten, in denen droid_v> 0 ist, dann möchten Sie meiner Meinung nach Folgendes:

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

Hoffe das hilft.