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

MySQL Group by - Ottieni colonne con conteggio zero

Il COUNT restituisce solo il COUNT per lo stato che trova per Microsoft. E quelli sono negati e ritirati. Devi alimentare la query tutti gli stati e COUNT le occorrenze di tutti loro. Quelli che non compaiono nella tabella rimarranno con 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;

Ciò che fa è:

SELECT DISTINCT STATUS
FROM tab1

Questo trova tutti gli stati possibili. Se hai una tabella di riferimento con tutti gli stati possibili, meglio ancora Usala al posto di questa query.

Quindi fai un LEFT JOIN su questa tabella per stato e companyName. In questo modo, otterrai una corrispondenza in STATUS solo se sul tavolo è presente un record. Se c'è, aggiungi 1 alla SOMMA, altrimenti aggiungi 0.

sqlfiddle demo