Помогите составить запрос

DeadMorozBLR

Новичок
Помогите составить запрос

Здравствуйте

Есть таблица следующего вида

Код:
+----+-------+--------+
| id | entry | status |
+----+-------+--------+
|  1 |     1 |      1 |
|  2 |     1 |      0 |
|  3 |     1 |      1 |
|  4 |     2 |      1 |
|  5 |     2 |      1 |
|  6 |     3 |      1 |
|  7 |     3 |      0 |
+----+-------+--------+
Нужно получить вот такой результат, т.е. для каждого из 'entry' получить количество
записей со статусом, равным 0, количество записей со статусом, равным 1 и общее количество
записей (фактически, сумма двух предыдущих полей).

Код:
+-------+----------+----------+-------+
| entry | status_0 | status_1 | total |
+-------+----------+----------+-------+
|     1 |        1 |        2 |     3 |
|     2 |        0 |        2 |     2 |
|     3 |        1 |        1 |     2 |
+-------+----------+----------+-------+
У меня получилось нечто следующее:

Код:
CREATE TEMPORARY TABLE `tmp`
SELECT `entry`,
COUNT(`entry`) AS `total`
FROM `mytbl`
GROUP BY `entry`;

SELECT `tmp`.`entry`,
COUNT(`tmp`.`entry`) AS `status_0`,
`total` - COUNT(`tmp`.`entry`) AS `status_1`,
`tmp`.`total`
FROM `tmp`
LEFT JOIN `mytbl`
ON `mytbl`.`entry` = `tmp`.`entry`
AND `mytbl`.`status` = 0
GROUP BY `tmp`.`entry`;
Однако, результат - неверный для записей, у которых значение поля status_0
равно нулю (для entry = 2), т.к. одна запись из таблицы `mytbl` во втором запросе всё равно присоединяется.

Код:
+-------+----------+----------+-------+
| entry | status_0 | status_1 | total |
+-------+----------+----------+-------+
|     1 |        1 |        2 |     3 |
|     2 |        1 |        1 |     2 |
|     3 |        1 |        1 |     2 |
+-------+----------+----------+-------+
Подскажите, пожалуйста, более правильное решение, и есть ли возможность получить такой результат в один
запрос (без использования временной таблицы).
 

DeadMorozBLR

Новичок
да, спасибо - это работает, но задача - в том, чтобы получить результат именно в таком формате, т.е. по одной записи для каждого из 'entry'.
 

chira

Новичок
Код:
select entry
,COUNT(IF(status = 0,1,null)) status_0
,COUNT(IF(status = 1,1,null)) status_1
, count(*) total
from table 
group by entry
 
Сверху