Question

I have a mysql query like the following.

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)

The following is not the exact query but a pseudo query

here _a_list_of_client_id is another query like following select id_client from client where id_user = {some_id_given_as_parameter}

I just wondering is this the right approach to use same subquery multiple times in a query. Or is there any other way to do things like this.

Thanks in advance M H Rasel

Was it helpful?

Solution

You can use sum with case and move the subquery to the where criteria:

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)

There are a couple other ways to do this (using if for example or leaving out the case), but I think this is easy to read. I believe mysql will work with sum(status='new') for example.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top