iT邦幫忙

1

Oracle分組後取前三筆資料

C# SMI 2018-03-15 10:17:3618133 瀏覽

目前公司有需求
想把每個商品種類熱銷前三名的商品給列出來
請問技術大大們如何解決?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
暐翰
iT邦大師 1 級 ‧ 2018-03-15 10:33:07
最佳解答

概念:

1.使用row_number:

row_number() over (...)

2.以商品類為準:

partition by 商品類

3.照著業績"倒序排序" :

order by 業績 desc

4.對子查詢做where篩選,篩選出前三名的

where 排名 <= 3;

完整範例範例:

with Temp_Table as (
    select '鞋' 商品類,'Nike' 商品 , 1234000 業績 from dual
    union all select '鞋' 商品類,'愛迪達' 商品 , 132200 業績 from dual
    union all select '鞋' 商品類,'雜牌' 商品 , 223400 業績 from dual
    union all select '鞋' 商品類,'PUMA' 商品 , 43532 業績 from dual
    union all select '手機' 商品類,'HTC' 商品 , 32423 業績 from dual
    union all select '手機' 商品類,'IPHONE' 商品 , 423 業績 from dual
    union all select '手機' 商品類,'三星' 商品 , 23413 業績 from dual
    union all select '手機' 商品類,'NOKIA' 商品 , 14344 業績 from dual
)
select 商品類,商品,業績,排名 from (
    select  T100.*
        ,row_number() over (partition by 商品類 order by 業績 desc  ) 排名  --藉由row_number
    from Temp_table T100
)where 排名 <= 3;

C# SMI iT邦新手 5 級 ‧ 2018-03-15 10:40:10 檢舉

謝謝大大!!!

b8201032 iT邦新手 4 級 ‧ 2021-06-01 09:34:52 檢舉

查oracle ,跑出這,根本就不是oracle sql 語法

暐翰 iT邦大師 1 級 ‧ 2021-06-01 11:09:00 檢舉

b8201032 是 oracle

1
棉花
iT邦新手 4 級 ‧ 2018-03-15 10:32:49

我的想法:
Group by商品種類,依銷售量排序後,取銷售量最高的前三筆資料

C# SMI iT邦新手 5 級 ‧ 2018-03-15 10:40:02 檢舉

謝謝大大!

我要發表回答

立即登入回答