Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL Group by - Récupère les colonnes sans compter

Le COUNT renvoie uniquement le COUNT pour le statut qu'il trouve pour Microsoft. Et ceux-ci sont refusés et retirés. Vous devez alimenter la requête avec tous les statuts et COMPTER les occurrences de chacun d'eux. Ceux qui n'apparaissent pas dans le tableau seront laissés avec 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;

Voici ce que cela fait :

SELECT DISTINCT STATUS
FROM tab1

Cela trouve tous les statuts possibles. Si vous avez une table de référence avec tous les statuts possibles, encore mieux Utilisez-la à la place de cette requête.

Ensuite, vous faites un LEFT JOIN sur cette table par status et companyName. De cette façon, vous n'obtiendrez une correspondance dans STATUS que s'il y a un enregistrement sur la table. S'il y en a, vous ajoutez 1 à la somme, sinon vous ajoutez 0.

démo sqlfiddle