sql >> Database teknologi >  >> RDS >> Mysql

MySQL - Betinget COUNT med GROUP BY

Hvis droid_v kun kan være 0, 1, 2, 3 eller 4, vil COUNT(DISTINCT) aldrig returnere mere end 5, da der kun er fem mulige værdier. Er det det du vil? Hvis ja, så prøv dette:

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

Opdatering: Ups, undskyld, ovenstående er ikke helt korrekt, da det måske ikke er et nul. Det skal være:

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

Hvis du på den anden side vil have en optælling af alle rækkerne, hvor droid_v> 0, så tror jeg, du vil have dette:

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

Håber dette hjælper.



  1. Sådan forbinder du tre bord efter larve veltalende model

  2. Hvordan vælger GROUP BY DESC sin ordre?

  3. Sådan kontrolleres om en tabel findes i et givet skema

  4. Psycopg2, Postgresql, Python:Hurtigste måde at bulk-indsætte