Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Group by - Obter colunas com contagem zero


O COUNT está retornando apenas o COUNT para o status que ele encontra para a Microsoft. E esses são Negado e Wthdrawn. Você tem que alimentar a consulta com todos os status e CONTAR as ocorrências de todos eles. Os que não aparecerem ficarão na tabela com 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;

O que isso faz é:
SELECT DISTINCT STATUS
FROM tab1

Isso encontra todos os status possíveis. Se você tiver uma tabela de referência com todos os status possíveis, melhor ainda Use-a em vez desta consulta.

Então você faz um LEFT JOIN nesta tabela por status e companyName. Dessa forma, você só obterá uma correspondência em STATUS se houver um registro na tabela. Se houver, você adiciona 1 à SOMA, caso contrário, adiciona 0.

demonstração do sqlfiddle