2015-11-27 4 views
2

enter image description hereНесколько выберите отсчет (*) в одном запросе

У меня есть MySQL таблицы (tbl_subscriptiondetails), как в above.Here последний столбец т.е. 'test_status' может иметь возможные значения C, только S & Y. Использования одного запроса я хотел бы получить данные в порядке , как показано ниже

enter image description here

Но запрос, который я использую дает мне нежелательный запрос results.My является

SELECT pkg_name, 
(SELECT COUNT(*) FROM tbl_subscriptiondetails WHERE test_status='C' AND mem_id=3) AS completed, 
(SELECT COUNT(*) FROM tbl_subscriptiondetails WHERE test_status='S' AND mem_id=3) AS started, 
(SELECT COUNT(*) FROM tbl_subscriptiondetails WHERE test_status='Y' AND mem_id=3) AS remaining 
FROM tbl_subscriptiondetails 
WHERE mem_id=3 
GROUP BY pkg_name 

и результат enter image description here

enter image description here

Пожалуйста, сообщите, что не так. Заранее спасибо.

+0

у вас есть независимые запросы. Попробуйте добавить зависимость: 'И t1.pkg_name = t.pkg_name' –

+0

Предполагается, что ваша логика останова будет 'S' + 'Y'? –

+1

Также вы можете написать его без подзапросов: 'SELECT SUM (IF (test_status = 'C', 1, 0))' –

ответ

2

Вы используете подзапрос для каждого счета вместо того, чтобы считать его частью основного запроса. Поэтому условия вашего фильтра не ведут себя так, как вы ожидаете. Вы можете изменить его таким образом, чтобы сделать условный подсчет:

SELECT pkg_name, 
SUM(case when test_status='C' then 1 else 0 end) AS completed, 
SUM(case when test_status='S' then 1 else 0 end) AS started, 
SUM(case when test_status='Y' then 1 else 0 end) AS remaining 
FROM tbl 
WHERE mem_id = 3 
GROUP BY pkg_name 

Demo

+0

лучше исключить mem_id, где –

+0

Да, собирался обновить для этого. –

+0

Спасибо Shree.pat18. Ваше решение отлично работает! :) –

Смежные вопросы