Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Group by - Вземете колони с нулев брой

COUNT връща само COUNT за състоянието, което намира за Microsoft. И те са Отказани и Изтеглени. Трябва да подадете на заявката всички състояния и да БРОИТЕ срещанията на всички тях. Тези, които не се показват, в таблицата ще бъдат оставени с 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;

Това прави следното:

SELECT DISTINCT STATUS
FROM tab1

Това открива всички възможни състояния. Ако имате справочна таблица с всички възможни състояния, още по-добре я използвайте вместо тази заявка.

След това правите LEFT JOIN на тази таблица по статус и име на компания. По този начин ще получите съвпадение в STATUS само ако има запис на масата. Ако има, добавяте 1 към SUM, в противен случай добавяте 0.

демонстрация на sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. В zend, как да отпечатам правилно mysql заявка?

  2. Mysql - Как да излезете от съхранената процедура

  3. Дублиране на бази данни от Oracle към mysql

  4. Как да използвам псевдоним в клаузата where в mysql

  5. Задайте стойността на mySQL MAX на java променлива