このクエリは、ランキング関数を使用して各グループのトップ アイテムを取得します。
内部選択の数を 3 つではなく 2 つに減らしたいと考えています。最も内側のクエリで rank() 関数を使用しようとしましたが、集計関数と一緒に機能させることができませんでした。次に、さらに別の select ステートメントでラップしないと、「itemrank」で where 句を使用できませんでした。
何か案は?
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サーバー2008を使用