sql >> Databáze >  >> RDS >> Mysql

MySQL Group by - Získejte sloupce s nulovým počtem

COUNT vrací pouze COUNT pro stav, který zjistí pro Microsoft. A těmi jsou Denied a Wthdrawn. Do dotazu musíte zadat všechny stavy a POČÍTAT výskyty všech z nich. Ty, které se neobjeví, budou v tabulce ponechány s 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;

Co to dělá je:

SELECT DISTINCT STATUS
FROM tab1

Tím se najdou všechny možné stavy. Pokud máte referenční tabulku se všemi možnými stavy, ještě lépe ji použijte místo tohoto dotazu.

Poté provedete LEVÝ JOIN na této tabulce podle stavu a názvu společnosti. Tímto způsobem získáte shodu ve STATUS pouze v případě, že je na stole záznam. Pokud existuje, přidáte 1 k SUM, jinak přidáte 0.

ukázka sqlfiddle



  1. Klíčové slovo MySQL DELIMITER nefunguje

  2. Dynamicky naplňujte WTForm SelectField dotazem sqlAlchemy

  3. Celé číslo vs char pro vlastnost záznamu DB

  4. MySQL LIKE vs LOCATE