Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres:基于列中的多个值获取聚合查询_Sql_Postgresql_Group By - Fatal编程技术网

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;