该查询使用排名函数获取每个组中的顶级项目。使用rank函数优化sql查询
我想减少内部选择的数量减少到两个而不是三个。我尝试在最里面的查询中使用rank()函数,但无法使它与聚合函数一起工作。然后,我不能在'itemrank'中使用where子句而不将其包装在另一个select语句中。
任何想法?
select *
from (
select
tmp.*,
rank() over (partition by tmp.slot order by slot, itemcount desc) as itemrank
from (
select
i.name,
i.icon,
ci.slot,
count(i.itemid) as itemcount
from items i
inner join citems ci on ci.itemid = i.itemid
group by i.name, i.icon, ci.slot
) as tmp
) as popularitems
where itemrank = 1
编辑:使用SQL Server 2008
我不明白的方式来做到这一点......但你为什么要(或需要)砍掉加入? – 2010-02-19 04:24:47
这只是对我来说似乎马虎,我想这样做最好的方法:) – jimj 2010-02-19 04:44:38