PostgreSQL根据总行数将前2名的多行分组为单列
例如,我有这张桌子PostgreSQL根据总行数将前2名的多行分组为单列,sql,postgresql,group-by,aggregate,greenplum,Sql,Postgresql,Group By,Aggregate,Greenplum,例如,我有这张桌子 ek_id phone_number product ctgry usage 12345 525556456 DSX Ads 4 78910 525556789 stillery Communications 2 12345 525556456 Dtscou eCommerce 3 78915 525556777
ek_id phone_number product ctgry usage
12345 525556456 DSX Ads 4
78910 525556789 stillery Communications 2
12345 525556456 Dtscou eCommerce 3
78915 525556777 Dyandra Education 2
12345 525556456 DynAd Ads 1
78910 525556789 eCreat Communications 4
78915 525556777 tivemeasure eCommerce 5
78910 525556789 klanku Ads 6
78910 525556789 Ema Communications 7
我想这样做
ek_id phone_number product ctgry usage
12345 525556456 DSX | stillery Ads | Education 8|6
78910 525556789 DSX | eCreat Ads | eCommerce 10|8
78915 525556777 ema | klanku Ads | Communications 9|5
因此,基本上根据最高的总使用量将前2名产品和ctgry分为管道分离柱
对于小组来说,将是
SELECT ek_id, phone_number,
array_agg(product) as product,
array_agg(ctgry) as ctgry,
array_agg(usage) as usage
FROM t
GROPUP BY 1,2
。。。但需要了解的是,电话号码是否也适用于团体
根据总数将前2个多行分组到单个列中
Top是关于order by DESC,而多行是关于count*>1。。。所以
选择ek_id,-似乎是主键
马克斯电话号码,-?请更好地定义
字符串_aggarray _aggdroduct,“|”作为产品,
字符串_aggray_aggctgry,“|”作为ctgry,
字符串_aggarray _agguuse,|作为用法
从t
以1的速度增长
计数*>1的
按用途说明订购
限制2
根据最高总使用量,将前2名产品和ctgry分组到管道分离柱上
限制2只过滤前2名,sumusage检查最高的总使用量。对于带有管道的布局,可以包括字符串_aggx“|”,如字符串_aggarray_aggproduct“|”中所示 嗨,彼得,谢谢你的回复。我想我需要修改这个问题。我所说的前2名仅适用于产品和ctgry。例如,我有5种产品。因此,只有列上显示的前2个产品,而不是前5个,根据总使用量的最高总和,排名前2。我尝试了你的代码,它工作了,但限制了整体结果。