将两个SELECT查询合并为一个

Phi*_*ord 5 sql postgresql logic

我有两个查询,我只需要总记录数,但查询中唯一的区别是一个字段值.

例;

SELECT COUNT(*) AS group_a
FROM tbl
WHERE category = 'value_a'

SELECT COUNT(*) AS group_b
FROM tbl
WHERE category = 'value_b'
Run Code Online (Sandbox Code Playgroud)

我怎么能得到这样的东西:(伪)

SELECT COUNT(*) AS group_a, COUNT(*) AS group_b
FROM tbl
WHERE category IN ('value_a', 'value_b')
Run Code Online (Sandbox Code Playgroud)

但结果是这样的

group_a , group_b
56, 101
Run Code Online (Sandbox Code Playgroud)

我在查询中想一个CASE语句来过滤这两个,但我该如何实现呢?或者,还有更好的方法?

我现在正在做一个UNION,但想知道我是否可以返回一条带有两个结果的记录

Joe*_*lli 6

select sum(case when category = 'value_a' then 1 else 0 end) as group_a,
       sum(case when category = 'value_b' then 1 else 0 end) as group_b
    from tbl
    where category in ('value_a', 'value_b')
Run Code Online (Sandbox Code Playgroud)

  • 请注意,where子句仅在索引列"category"时才有用 (3认同)