Rank()函数。从查询中提取前3个计数,属于母查询?

时间:2019-03-21 15:51:53

标签: postgresql

我下面有一个母表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(*)来检索数据?

1 个答案:

答案 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

但是您的“动物颜色”字段中包含类别和颜色是一个非常糟糕的主意。