我有这样的桌子
id col1 col2
1 A 1
2 B 0
3 A 1
4 C 1
5 B 0
6 A 0
7 C 1
8 C 1
9 B 1
10 B 0
我需要类似这样的查询
Values 1 0
A 2 1
B 1 3
C 3 0
在以上结果中,标题显示了col2
个不同的值(1,0)
,行名表示了col1
的不同值。表格中的值显示计数。
是否有人建议在postgresql中得到这样的结果?
答案 0 :(得分:2)
您需要条件聚合:
select col1,
sum(case when col2 = 1 then 1 else 0 end) as 1,
sum(case when col2 = 0 then 1 else 0 end) as 0
from table t
group by col1;
答案 1 :(得分:1)
您也可以使用FILTER:
SELECT
col1,
COUNT(*) FILTER (WHERE col2 = 1) AS 1,
COUNT(*) FILTER (WHERE col2 = 0) AS 0,
FROM
foo
GROUP BY
col1;
答案 2 :(得分:0)
以下是编写此逻辑的更简单方法。第一个是Postgres特定的:
select col1,
sum( (col2 = 1)::int ) as num_1,
sum( (col2 = 0)::int as num_0
from t
group by col1;
第二个只是使用算术:
select col1,
sum( col2 ) as num_1,
sum( 1 - col2 ) as num_0
from t
group by col1;