Sql 基于另一个分组的条件分组
假设我有3个小组,4个顾问和3个客户:Sql 基于另一个分组的条件分组,sql,amazon-redshift,Sql,Amazon Redshift,假设我有3个小组,4个顾问和3个客户: group_id advisor_id client_id assets 1 1 1 100 1 2 2 200 2 3 3 4 3 300 您能否协助获得: count groups with 1 advisor_id (=2) count groups with > 1
group_id advisor_id client_id assets
1 1 1 100
1 2 2 200
2 3
3 4 3 300
您能否协助获得:
count groups with 1 advisor_id (=2)
count groups with > 1 advisor_id (=1)
count clients for groups with 1 advisor_id (=1)
count clients for groups with >1 advisor id (=2)
我尝试了以下几种变体:
当count(顾问id)超过(按组id划分)=1时选择case,然后count(不同组id)结束
及
当计数(顾问id)=1时选择案例,然后计数(不同的客户id)结束
但这些并不能满足我的需求。您可以使用多重聚合。例如,对于前两个,我将使用直方图查询::
select cnt, count(*), min(group_id), max(group_id)
from (select group_id, count(distinct adviser_id) as cnt
from t
group by group_id
) t
group by cnt;
您特别关心“1”或“多于1”。为此,我可以这样说:
select sum(case when cnt = 1 then 1 else 0 end) as only_1,
sum(case when cnt > 1 then 1 else 0 end) as more_than_1
from (select group_id, count(distinct adviser_id) as cnt
from t
group by group_id
) t;
对于客户端,我需要进行
计数(当cnt=1时为不同的情况,然后是client\u id else 0 end)
但由于某些原因,它会对空的client\u id进行计数,即使我进行计数(当cnt=1且client\u id不为空时为不同的情况,然后是client\u id else 0 end)
。有什么想法吗?我无法在客户端id不为null的位置放置。。