使排名查询高效
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 个参数(Sales
SalesQty
Profit
Hits
Cost
,都是数字)。 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 分钟以上是关于使排名查询高效的主要内容,如果未能解决你的问题,请参考以下文章