在 WhereIN 条件下重复 COUNT

SNa*_*aRe 2 postgresql optimization

我有这个查询并且有效。但对我来说,它需要一些优化似乎很难看,因为我一遍又一遍地重复相同的动作。必须有更好的方法来合并所有这些

SELECT *
FROM
  (SELECT COUNT(*) AS a
   FROM order_item_histories
   WHERE order_status_id IN (5, 4, 15)) AS e,
  (SELECT COUNT(*) AS b
   FROM order_item_histories
   WHERE order_status_id IN (6)) AS f,
  (SELECT COUNT(*) AS c
   FROM order_item_histories
   WHERE order_status_id IN (4, 10, 9, 12, 7)) AS g,
  (SELECT COUNT(*) AS d
   FROM order_item_histories
   WHERE order_status_id IN (11, 16, 17, 13)) AS h
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

使用条件聚合:

select count(*) filter (where order_status_id in (5,4,15)) as a, 
       count(*) filter (where order_status_id in (6)) as b,
       count(*) filter (where order_status_id in (4,10,9,12,7)) as c,
       count(*) filter (where order_status_id in (11,16,17,13)) as d
from order_item_histories;
Run Code Online (Sandbox Code Playgroud)

  • @SNaRe:它尽可能紧凑。 (2认同)