Sql 基于另一个分组的条件分组

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

假设我有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 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的位置放置。。