Jika droid_v hanya bisa 0, 1, 2, 3, atau 4, maka COUNT(DISTINCT) tidak akan pernah mengembalikan lebih dari 5, karena hanya ada lima kemungkinan nilai. Apakah itu yang Anda inginkan? Jika demikian, coba ini:
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
Pembaruan: Ups, maaf, yang di atas kurang tepat karena mungkin tidak ada ada nol. Seharusnya:
SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid
Sebaliknya, jika Anda ingin menghitung semua baris di mana droid_v> 0, maka saya rasa Anda menginginkan ini:
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
Semoga membantu.