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

MySQL Group by - Få kolonner med nul tælling

COUNT returnerer kun COUNT for den status, han finder for Microsoft. Og dem er Denied og Wthdrawn. Du skal give forespørgslen alle statusser og TÆLLE forekomsterne af dem alle. De, der ikke vises, vil stå med 0:

i tabellen
SELECT a.STATUS, 
      SUM(CASE 
        WHEN b.STATUS IS NOT NULL
          THEN 1
        ELSE 0
      END) AS StatusCount
FROM (
  SELECT DISTINCT STATUS
  FROM tab1
  ) a
LEFT JOIN tab1 b ON a.STATUS = b.STATUS AND b.CompanyName = 'Microsoft'
GROUP BY a.STATUS;

Hvad dette gør er:

SELECT DISTINCT STATUS
FROM tab1

Dette finder alle mulige statusser. Hvis du har en referencetabel med alle mulige statusser, er det endnu bedre at bruge den i stedet for denne forespørgsel.

Så laver du en LEFT JOIN på denne tabel efter status og firmanavn. På denne måde får du kun en kamp i STATUS, hvis der er rekord på bordet. Hvis der er, tilføjer du 1 til SUMMEN, ellers tilføjer du 0.

sqlfiddle-demo



  1. Sådan henvises til en kolonne efter ID eller indeksnummer

  2. Mysql Som at indeholde wildcart giver uventet resultat

  3. Hurtig nem måde at migrere SQLite3 til MySQL?

  4. Sådan sikkerhedskopieres MySQL-database i PHP?