1

我有一个如下的 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 是另一个查询,例如 select id_client from client where id_user = {some_id_given_as_parameter}

我只是想知道这是在查询中多次使用相同子查询的正确方法。或者有没有其他方法可以做这样的事情。

在此先感谢 MH Rasel

4

1 回答 1

1

您可以使用sumwithcase并将子查询移动到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')

于 2013-10-30T13:41:17.260 回答