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