該查詢使用排名函數獲取每個組中的頂級項目。使用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