sql >> Base de Datos >  >> RDS >> Mysql

MySQL Group by - Obtener columnas con conteo cero

El COUNT solo devuelve el COUNT para el estado que encuentra para Microsoft. Y esos son Negados y Retirados. Debe alimentar la consulta con todos los estados y CONTAR las ocurrencias de todos ellos. Los que no aparezcan en la tabla se quedarán 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;

Lo que esto hace es:

SELECT DISTINCT STATUS
FROM tab1

Esto encuentra todos los estados posibles. Si tiene una tabla de referencia con todos los estados posibles, mejor utilícela en lugar de esta consulta.

Luego hace un LEFT JOIN en esta tabla por estado y nombre de la empresa. De esta forma, solo obtendrá una coincidencia en ESTADO si hay un registro en la tabla. Si lo hay, sumas 1 a la SUMA, de lo contrario sumas 0.

demostración de sqlfiddle