droid_vが0、1、2、3、または4のみである場合、可能な値は5つしかないため、COUNT(DISTINCT)が5を超える値を返すことはありません。それはあなたが望むものですか?もしそうなら、これを試してみてください:
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
更新: おっと、申し訳ありませんが、 がない可能性があるため、上記は正しくありません。 ゼロ。次のようになります:
SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid
一方、droid_v> 0であるすべての行のカウントが必要な場合は、これが必要だと思います:
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
これがお役に立てば幸いです。