Nếu droid_v chỉ có thể là 0, 1, 2, 3 hoặc 4, thì COUNT (DISTINCT) sẽ không bao giờ trả về nhiều hơn 5, vì chỉ có năm giá trị có thể. Đó là điều bạn muốn? Nếu vậy, hãy thử cách này:
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
Cập nhật: Rất tiếc, xin lỗi, phần trên không đúng vì có thể không có một số không. Nó phải là:
SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid
Mặt khác, nếu bạn muốn tổng số tất cả các hàng có droid_v> 0, thì tôi nghĩ bạn muốn điều này:
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
Hy vọng điều này sẽ hữu ích.