Sql Postgres:基于列中的多个值获取聚合查询
我有以下数据库表:Sql Postgres:基于列中的多个值获取聚合查询,sql,postgresql,group-by,Sql,Postgresql,Group By,我有以下数据库表: id, owner_id, partner_id, level 1, 121, 234, gold 2, 121, 342, silver 3, 121, 423, silver 4, 233, 333, silver 5, 233, 434, gold 我试图以以下格式获得结果: owner_id, number_of_partners, total_gold, total_silver, total_bronze 我不确定这是否可行,到目前为止,我从基本的groupb
id, owner_id, partner_id, level
1, 121, 234, gold
2, 121, 342, silver
3, 121, 423, silver
4, 233, 333, silver
5, 233, 434, gold
我试图以以下格式获得结果:
owner_id, number_of_partners, total_gold, total_silver, total_bronze
我不确定这是否可行,到目前为止,我从基本的groupby查询开始,从那里可以得到每个所有者的合作伙伴总数
SELECT owner_id, count(partner_id) FROM owner_partner GROUP BY owner_id
如何扩展此功能以获得结果?只需使用条件聚合:
SELECT owner_id, count(partner_id),
sum(case when level = 'gold' then 1 else 0 end) as gold,
sum(case when level = 'silver' then 1 else 0 end) as silver,
sum(case when level = 'bronze' then 1 else 0 end) as bronze
FROM owner_partner
GROUP BY owner_id;
我建议缩短语法(与CASE
语句的性能大致相同):
SELECT owner_id
, count(*) AS total
, count(level = 'gold' OR NULL) AS gold
, count(level = 'silver' OR NULL) AS silver
, count(level = 'bronze' OR NULL) AS bronze
FROM tbl
GROUP BY 1;