Search code examples
mysqlin-subquery

same (sub)query multiple time in a mysql query


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


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.