Один и тот же (под) запрос несколько раз в запросе 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

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') например.

Другие вопросы по тегам