首页 > 解决方案 > 如何从postgres中具有最大计数的列中获取值?

问题描述

我了解 MAX 函数从给定列返回数值列的最大值。我想返回一列的最大计数。下表有两列制造商,产品。

maker    product      
A        Printer   
B        Laptop        
B        Laptop      
A        Printer 
A        Monitor
A        Printer
A        Scanner

但是当我运行查询'''select maker, max(type) from table group by maker; ''' 我得到的结果是

maker    product      
A        Monitor   
B        Laptop  

  

我想要哪种产品相对于制造商具有最大计数,如下所示。

maker  product      
A      Printer   
B      Laptop  

  

注意:由于制造商数量不同,我们不能在Having子句中设置一个共同的数字。

标签: postgresql

解决方案


您可以使用RANK()窗口功能来做到这一点:

select t.maker, t.product
from (
  select maker, product, 
    rank() over (partition by maker order by count(*) desc) rn
  from tablename 
  group by maker, product
) t
where t.rn = 1

请参阅演示
结果:

| maker | product |
| ----- | ------- |
| A     | Printer |
| B     | Laptop  |

推荐阅读