对不起,如果这是一个基本问题。
我有一张桌子
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
感谢所有帮助。这样做的最佳方式是什么?
由于
答案 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;
您可以直接在聚合查询中使用窗口函数。仅需要子查询来引用序列号进行过滤。