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.