DeadMorozBLR
Новичок
Помогите составить запрос
Здравствуйте
Есть таблица следующего вида
Нужно получить вот такой результат, т.е. для каждого из 'entry' получить количество
записей со статусом, равным 0, количество записей со статусом, равным 1 и общее количество
записей (фактически, сумма двух предыдущих полей).
У меня получилось нечто следующее:
Однако, результат - неверный для записей, у которых значение поля status_0
равно нулю (для entry = 2), т.к. одна запись из таблицы `mytbl` во втором запросе всё равно присоединяется.
Подскажите, пожалуйста, более правильное решение, и есть ли возможность получить такой результат в один
запрос (без использования временной таблицы).
Здравствуйте
Есть таблица следующего вида
Код:
+----+-------+--------+
| id | entry | status |
+----+-------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
| 4 | 2 | 1 |
| 5 | 2 | 1 |
| 6 | 3 | 1 |
| 7 | 3 | 0 |
+----+-------+--------+
записей со статусом, равным 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`;
равно нулю (для entry = 2), т.к. одна запись из таблицы `mytbl` во втором запросе всё равно присоединяется.
Код:
+-------+----------+----------+-------+
| entry | status_0 | status_1 | total |
+-------+----------+----------+-------+
| 1 | 1 | 2 | 3 |
| 2 | 1 | 1 | 2 |
| 3 | 1 | 1 | 2 |
+-------+----------+----------+-------+
запрос (без использования временной таблицы).