Jeśli droid_v może wynosić tylko 0, 1, 2, 3 lub 4, to COUNT(DISTINCT) nigdy nie zwróci więcej niż 5, ponieważ istnieje tylko pięć możliwych wartości. Czy tego chcesz? Jeśli tak, spróbuj tego:
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
Aktualizacja: Ups, przepraszam, powyższe nie jest całkiem w porządku, ponieważ może nie być być zero. Powinno być:
SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid
Z drugiej strony, jeśli chcesz policzyć wszystkie wiersze, w których droid_v> 0, to myślę, że chcesz to:
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
Mam nadzieję, że to pomoże.