此查询使用排名函数获取每个组中的顶部项目。
我想将内部选择的数量减少到两个而不是三个。我尝试在最里面的查询中使用 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