抱歉,如果这是一个基本问题。
基本上,我有一个表格如下,下面是一个基本示例
store-ProdCode-result
13p I10x 5
13p I20x 7
13p I30x 8
14a K38z 23
17a K38z 23
我的数据集有将近 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 个产品代码
所以:
store--prodcode--result
1a abc 5
1a abd 4
2a dgf 1
2a ldk 6
.(距离下一个商店代码还有 10 次)
最佳答案
您可以在 FROM 子句中两次使用该表,一次用于数据,一次用于计算该商店的结果较少的记录数。
SELECT a.s_code, a.prod_code, count(*)
FROM top10_secondary a
LEFT OUTER JOIN top10_secondary b
ON a.s_code = b.s_code
AND b.result < a.result
GROUP BY a.s_code, a.prod_code
HAVING count(*) < 10
虽然使用这种技术,如果第 10 个结果值多次存在,您可能会在每个商店获得超过 10 条记录。因为限制规则只是“只要结果值小于我的10条记录就包含记录”
在您的情况下,“结果”似乎是一个排名,因此它们不会在每个商店重复。
关于SQL计数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39899761/