sql >> Database >  >> RDS >> Mysql

MySQL Group by - Krijg kolommen zonder telling

De COUNT retourneert alleen de COUNT voor de status die hij voor Microsoft vindt. En die zijn Ontkend en Wthdrawn. U moet de query alle statussen geven en de exemplaren van allemaal TELLEN. Degenen die niet verschijnen, blijven in de tabel staan ​​met 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;

Wat dit doet is:

SELECT DISTINCT STATUS
FROM tab1

Hiermee worden alle mogelijke statussen gevonden. Als u een referentietabel heeft met alle mogelijke statussen, kunt u deze nog beter gebruiken in plaats van deze zoekopdracht.

Dan doe je een LEFT JOIN op deze tabel op status en companyName. Op deze manier krijg je alleen een match in STATUS als er een record op tafel ligt. Als dat zo is, voeg je 1 toe aan de SOM, anders voeg je 0 toe.

sqlfiddle-demo



  1. datum tijd pass waarde van python naar mysql

  2. Hoe kan ik meerdere invoer van rijen in dezelfde kolom van de database opslaan?

  3. Mysql - EXPLAIN SELECT from a VIEW zoekt in alle rijen van de hoofdtabel

  4. Oracle - SDO_GEOMETRY naar WKT converteren?