SQL计数查询

标签 sql postgresql greatest-n-per-group

抱歉,如果这是一个基本问题。

基本上,我有一个表格如下,下面是一个基本示例

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/

相关文章:

sql - 多个数据库文件是否比多个表的数据库文件效率低?(SQLite3&Node.js)

sql - Oracle,SQL,如何获取日期之间的间隔

postgresql - 在 Postgres 中没有找到任何名为 table_name 的关系

database - Postgres.app 设置 : getting `which psql` to return desired path

mysql - 根据命令显示特定输出 MYSQL

sql - Postgres 按列分组,并在组内按最大聚合选择其他列

sql - 在 SQL Server 中,按日期排序不按降序显示所有日期

mysql - 临时表对每个其他表都有一个计数

mysql - 比较两个表的数据,将共同数据存储在第三个表中,否则存储在第四个表中

sql - 从 "has one through"关系中查找最近的记录