Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Group by - Holen Sie sich Spalten mit Nullanzahl

Der COUNT gibt nur den COUNT für den Status zurück, den er für Microsoft findet. Und diese werden verweigert und zurückgezogen. Sie müssen der Abfrage alle Status zuführen und die Vorkommen aller von ihnen ZÄHLEN. Diejenigen, die nicht erscheinen, werden in der Tabelle mit 0 belassen:

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;

Was das bewirkt ist:

SELECT DISTINCT STATUS
FROM tab1

Dies findet alle möglichen Status. Wenn Sie eine Referenztabelle mit allen möglichen Status haben, verwenden Sie sie noch besser anstelle dieser Abfrage.

Dann machen Sie einen LEFT JOIN für diese Tabelle nach Status und Firmenname. Auf diese Weise erhalten Sie nur dann eine Übereinstimmung in STATUS, wenn ein Datensatz in der Tabelle vorhanden ist. Wenn ja, fügen Sie 1 zur SUMME hinzu, andernfalls fügen Sie 0 hinzu.

sqlfiddle-Demo