我有一个像以下一样的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
答案 0 :(得分: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')
一起使用。