SQL计数问题

时间:2016-10-06 21:15:01

标签: sql postgresql

对不起,如果这是一个基本问题。

我有一张桌子

store-ProdCode
13p      I10x   
13p      I20x   
13p      I30x   
14a      K38z    
17a      K38y    

我的数据集有近100,000条记录。

我要做的是,每家商店都会找到前10名的prodCode。

我不确定如何做到这一点,但我尝试的是:

select s_code as store, prod_code,count (prod_code)
from top10_secondary
where prod_code is not null 
group by store,prod_code
order by count(prod_code) desc limit 10

这给了我一些完全不同的东西,我不确定如何实现我的最终结果。

预期输出应为:每个商店(s_code)显示前10个prodcode(按计数计算的前10个)

这样:

store--prodcode--result
1a      abc       5
1a      abd       4 
1a      xxx       7
--- this will be done until top 10 prodcodes for 1a are done--
2a      dgf       1
2a      ldk       6
--process completes until end of data is reached and top 10 prodcodes are displayed for each store

感谢所有帮助。这样做的最佳方式是什么?

由于

1 个答案:

答案 0 :(得分:1)

一种方法使用row_number(),如下所示:

select s.*
from (select s_code as store, prod_code, count(prod_code),
             row_number() over (partition by s_code order by count(prod_code) desc) as seqnum
      from top10_secondary
      where prod_code is not null 
      group by s_code, prod_code
     ) s
where seqnum <= 10;

您可以直接在聚合查询中使用窗口函数。仅需要子查询来引用序列号进行过滤。