在一个查询中计算多个值的计数

pinkon5k  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(306)

我有一张这样的答案表:

ID ItemID Answer 
1   1      yes
2   1      no
3   1      yes
4   1      yes
5   2      no
6   2      yes
7   3      yes

我想提供一系列 ItemId 然后计算 number of yes answers - number of no answers 对于每个 ItemID 在数组中。
我可以为这样的单个项目执行此操作: SELECT (SELECT count(ID) FROM table WHERE ItemID= <id> AND Answer = 'Yes') - (SELECT count(ID) FROM table WHERE ItemID= <id> AND Answer = 'No') AS difference 但是我如何调整它以在一个查询中处理多个id呢?
我的预期产出 [1,2] 看起来像

ItemID Difference 
  1      2
  2      0
nnvyjq4y

nnvyjq4y1#

只需使用条件聚合:

select itemid,
       count(*) filter (where answer = 'yes') as num_yes,
       count(*) filter (where answer = 'no') as num_no
from t
group by itemid;

你可以包括 where itemid in (1, 2) (或类似的东西)如果你想把它限制在特定的项目上。

fwzugrvs

fwzugrvs2#

您可以使用case语句和聚合实现以下查询:
试试这个

select itemid "ItemID", sum(case when answer = 'yes' then 1 else -1 end) "Difference"
from example 
where itemid in (1,2) --condition can be removed if required for all IDs
group by itemid

演示

相关问题