MySQL Query: количество записей по статусу - PullRequest
0 голосов
/ 05 июня 2011

У меня есть таблица журнала со следующей схемой:

OperatorId - JobId - Status ( Good/Bad/Ugly )
Alex         6       Good
Alex         7       Good
James        6       Bad

Описание: всякий раз, когда оператор работает над заданием, вводится запись вместе с состоянием.Вот и все.

Теперь мне нужен отчет вроде:

OperatorId - Good Count - Bad Count - Ugly Count
Alex         2            0           0
James        0            1           0

Ответы [ 3 ]

2 голосов
/ 05 июня 2011
select operatorid,
sum(if(status="good",1,0)) as good,
sum(if(status="bad",1,0)) as bad,
sum(if(status="ugly",1,0)) as ugly
from table
group by operatorid
1 голос
/ 05 июня 2011

Если, как и я, вы предпочитаете, когда это возможно, рассчитывать счет с COUNT, а не с SUM, вот альтернативное решение, в котором используется метод, о котором спрашивается в этой теме :

SELECT
  operatorid,
  COUNT(status = 'good' OR NULL) as good,
  COUNT(status = 'bad' OR NULL) as bad,
  COUNT(status = 'ugly' OR NULL) as ugly
FROM table
GROUP BY operatorid
1 голос
/ 05 июня 2011

Это называется сводной таблицей. Это делается путем установки значения 1 или 0 для каждого состояния и последующего их суммирования:

SELECT 
  T.OperatorId,
  SUM(T.GoodStat) AS Good,
  SUM(T.BadStat) AS Bad,
  SUM(T.UglyStat) AS Ugly
FROM 
(
 SELECT 
   CASE WHEN Status = 'Good' THEN 1 ELSE 0 END AS GoodStat,
   CASE WHEN Status = 'Bad' THEN 1 ELSE 0 END AS BadStat,
   CASE WHEN Status = 'Ugly' THEN 1 ELSE 0 END AS UglyStat,
   OperatorId
  FROM logTable T
)
GROUP BY T.OperatorId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...