使排名查询高效

Posted

技术标签:

【中文标题】使排名查询高效【英文标题】:Making the ranking query efficient 【发布时间】:2015-06-15 15:14:49 【问题描述】:

我在 ACCESS 2010 中使用以下代码对表中的 ~30000 行进行排名。然而,排名大约需要 15 分钟(我必须再做 5 列,而且很容易需要一个多小时)。我需要这些列进行进一步处理,因此尝试创建一个新表。我也尝试过追加和更新现有的表。一切都需要同样的时间。我是否遗漏了一些明显的东西可以让它更快地工作?

SELECT MasterTable.Sales, (SELECT Count(*)+1 as HowMany From MasterTable AS Dupe WHERE Dupe.Sales > MasterTable.Sales) AS SalesRank INTO tableRank FROM MasterTable;

MasterTable 的详细信息: 11 列。 1 个主键(文本)。 5 个参数(SalesSalesQtyProfitHitsCost,都是数字)。 5个参数的秩(如SalesRank等) 30,000 行

【问题讨论】:

你能澄清Rank的意思吗? “排名”是指创建一个新列,其排名为 1(最高销售额)到最大值。 你能发布关于你的MasterTable的基本细节吗? MasterTable 的详细信息:11 列。 1 个主键。 5 个参数(如Sales)。 5 个参数的秩(如SalesRank) 30,000 行 对不起,我的意思更像是列名是什么,可能还有数据类型。 【参考方案1】:

您是否尝试过使用左连接进行分组?

SELECT
    m1.Sales,
    COUNT(*) AS HowMany
FROM
    MasterTable AS m1
    LEFT JOIN MasterTable m2 ON m1.Sales <= m2.Sales
GROUP BY
    m1.Sales

【讨论】:

运行时间比原始代码多。还是谢谢你。 常规加入也可以。不过应该不需要 15 分钟

以上是关于使排名查询高效的主要内容,如果未能解决你的问题,请参考以下文章

[多线程]亚马逊图书排名查询

如何查询数据库中排名前几位的数据

MySQL实现排名并查询指定用户排名功能,并列排名功能

SQL(MySQL + PHP) 查询,查询排名,表内一个人多条数据,查出最大的那条排名,请问!

SQL 怎样查询 单科成绩排名第3名的学生?

MySQL实现排名查询并指定用户查看排名