在mysql查询中多次(sub)查询

时间:2013-10-30 13:31:44

标签: mysql in-subquery

我有一个像以下一样的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 个答案:

答案 0 :(得分:1)

您可以将sumcase一起使用,并将子查询移至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')一起使用。