这种SQL是最有效的方式吗?

时间:2011-10-24 21:29:49

标签: sql

我们有一张表,可以使用一年将SAT分数转换为ACT分数。如果数据在未来发生变化,我们会将新分数与分数变化的年份相加。我们需要通过一年的比分并得分并返回正确的比赛得分。

三行的样本数据将是

act sat year
28 1010 1998
29 1010 2012
30 1010 2015

如果我通过了SAT分数1010和2014年的一年,我应该返回29分的行为分数。

我编写了以下可用的SQL语句。

select act, 
       RANK() OVER(ORDER BY year DESC) 
from keessattbl 
where sat = 1010 and INT(year) <= 2014 
FETCH FIRST ROW ONLY

这是处理此问题的最有效方法吗。

先谢谢道格

3 个答案:

答案 0 :(得分:0)

我会说“当然。”它表现不佳吗?

此外,大多数DBMS都有一些方法来获取结果集的第一行,因此除非您愿意,否则不需要使用DB2。

答案 1 :(得分:0)

另一种选择是使用以下内容:

select k1.*
from keessattbl k1
where k1.sat = 1010
and k1.year = (select max(k2.year) 
               from keessattbl k2
               where k2.sat = k1.sat
                 and k2.year <= 2014)

您需要检查哪一个更有效。如果year(可能sat)被编入索引,那么两者都可能非常快。

但是你需要查看执行计划(或简单地说明时间)才能找到答案。

答案 2 :(得分:0)

如果您不确定它是否是最有效的编写方式,那么您可以通过对查询执行EXPLAIN来检查。以另一种方式编写查询,对其进行EXPLAIN并比较成本。 IBM免费提供IBM Data Studio产品。你可以右键单击你的sql并选择Visual Explain来获得gui中的结果。