sql >> Databasteknik >  >> RDS >> Mysql

MySQL Group by - Få kolumner med noll räkning

COUNT returnerar bara COUNT för statusen som han hittar för Microsoft. Och de är Denied och Wthdrawn. Du måste mata frågan med alla statusar och RÄKNA förekomsterna av dem alla. De som inte visas kommer i tabellen att lämnas med 0:

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;

Vad detta gör är:

SELECT DISTINCT STATUS
FROM tab1

Detta hittar alla möjliga statusar. Om du har en referenstabell med alla möjliga statusar är det ännu bättre att använda den istället för den här frågan.

Sedan gör du en LEFT JOIN på denna tabell efter status och företagsnamn. På så sätt får du bara en match i STATUS om det finns ett rekord på bordet. Om det finns lägger du till 1 till SUMMA, annars lägger du till 0.

sqlfiddle-demo



  1. Hur hanterar man db-anslutningar på servern?

  2. Mysql:Hitta poster från specifik dag med hjälp av tidsstämpelkolumnen

  3. Hur kan jag skapa en tillfällig tabell i mariadb eller mysql?

  4. Flera främmande nyckel till samma tabell Gas Orm