sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Villkorligt COUNT med GROUP BY

Om droid_v bara kan vara 0, 1, 2, 3 eller 4, kommer COUNT(DISTINCT) aldrig att returnera mer än 5, eftersom det bara finns fem möjliga värden. Är det vad du vill? Om så är fallet, prova detta:

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

Uppdatering: Hoppsan, förlåt, ovanstående stämmer inte riktigt eftersom det kanske inte finns en nolla. Det ska vara:

SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid

Om du å andra sidan vill ha en räkning av alla rader där droid_v> 0, så tror jag att du vill ha detta:

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

Hoppas detta hjälper.



  1. Utlöser utlösare vid uppdatering av kolumnA eller kolumnB eller kolumnC

  2. Hur date_part() fungerar i PostgreSQL

  3. Det enkla sättet att distribuera ett MySQL Galera Cluster på AWS

  4. Hur får man en räkning även om det inte finns några resultat som motsvarar mysql?