один и тот же (под)запрос несколько раз в запросе mysql

У меня есть запрос mysql, подобный следующему.

select new,processing,close
from 

(select count(id) new from tickets where id_client in (_a_list_of_client_id) and status = new),

(select count(id) processing from tickets where id_client in (_a_list_of_client_id) and status = processing),

(select count(id) close from tickets where id_client in (_a_list_of_client_id) and status = close)

Ниже приведен не точный запрос, а псевдозапрос

здесь _a_list_of_client_id - это еще один запрос, подобный следующему: выберите id_client из клиента, где id_user = {some_id_given_as_parameter}

Мне просто интересно, правильный ли это подход для использования одного и того же подзапроса несколько раз в запросе. Или есть ли другой способ сделать такие вещи.

Заранее спасибо M H Rasel


person Md Monjur Ul Hasan    schedule 30.10.2013    source источник


Ответы (1)


Вы можете использовать sum с case и переместить подзапрос к критериям where:

select 
    sum(case when status = 'new' then 1 else 0 end) new, 
    sum(case when status = 'processing' then 1 else 0 end) processing, 
    sum(case when status = 'close' then 1 else 0 end) close
from tickets
where id_client in (_a_list_of_client_id)

Есть несколько других способов сделать это (например, используя if или опустив case), но я думаю, что это легко читается. Я считаю, что mysql будет работать, например, с sum(status='new').

person sgeddes    schedule 30.10.2013