我下面有一个母表A。
Animal Category Count
Cat 15
Dog 13
Raptile 20
下面我也有一个子表B。
Animal colour Count
Grey Cat 6
Red Cat 3
White Cat 4
Black Cat 2
Yellow Dog 7
Black Dog 1
Red Dog 2
Grey Dog 3
Red Reptile 5
Blue Reptile 10
Green Reptile 2
Yellow Reptile 3
但是我想要一个表,该表在一个表中显示子表B中来自母表A的每个动物类别的前3种动物颜色的计数。
因此,我的结果应如下所示。
Animal colour Count
Grey Cat 6
White Cat 4
Red Cat 3
Yellow Dog 7
Grey Dog 3
Red Dog 2
Blue Reptile 10
Red Reptile 5
Yellow Reptile 3
是否可以在子查询中使用rank(),count(*)来检索数据?
答案 0 :(得分:0)
您可以尝试以下方法:
select * from (
select rank() over (partition by categorie order by "Count" DESC) rank,* from (
select (string_to_array("Animal colour",' '))[2] categorie,* from b
) a) b where rank<=3 order by categorie,rank
但是您的“动物颜色”字段中包含类别和颜色是一个非常糟糕的主意。