1

このクエリは、ランキング関数を使用して各グループのトップ アイテムを取得します。

内部選択の数を 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を使用

4

2 に答える 2

3

Oracle と Teradata (およびおそらく他のものも) では、 を使用QUALIFY itemrank = 1して外部選択を取り除くことができます。これは ANSI 標準の一部ではありません。

于 2010-02-19T02:40:36.807 に答える