我正在编写一个带有排名算法的搜索例程,并希望一次性完成。
我的理想查询将是这样的......
select *, (select top 1 wordposition
from wordpositions
where recordid=items.pk_itemid and wordid=79588 and nextwordid=64502
) as WordPos,
case when WordPos<11 then 1 else case WordPos<50 then 2 else case WordPos<100 then 3 else 4 end end end end as rank
from items
是否可以在那里使用 WordPos?它在我身上产生一个错误,列名“WordPos”无效。
我知道我可以为每个案例重做子查询,但我认为它实际上会重新运行案例,不是吗?
例如:
select *, case when (select top 1 wordposition from wordpositions where recordid=items.pk_itemid and wordid=79588 and nextwordid=64502)<11 then 1 else case (select top 1 wordposition from wordpositions where recordid=items.pk_itemid and wordid=79588 and nextwordid=64502)<50 then 2 else case (select top 1 wordposition from wordpositions where recordid=items.pk_itemid and wordid=79588 and nextwordid=64502)<100 then 3 else 4 end end end end as rank from items
那行得通....但它真的每次都重新运行相同的查询吗?
很难从测试中分辨出来,因为它第一次运行很慢,但随后的运行很快......它正在缓存......所以这是否意味着它第一次运行它的第一行,随后的 3 次会从缓存中得到结果吗?
只是好奇最好的方法是什么......谢谢!瑞安