row_number

oracle分析函数Rank, Dense_rank, row_number

强颜欢笑 提交于 2020-03-11 18:02:37
一、使用 rownum 为记录排名: 在前面一篇《 Oracle 开发专题之:分析函数》,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题: ① 对所有客户按订单总额进行排名 ② 按区域和客户订单总额进行排名 ③ 找出订单总额排名前 13 位的客户 ④ 找出订单总额最高、最低的客户 ⑤ 找出订单总额排名前 25% 的客户 按照前面第一篇文章的思路,我们只能做到对各个分组的数据进行统计,如果需要排名的话那么只需要简单地加上 rownum 不就行了吗?事实情况是否如此想象般简单,我们来实践一下。 【 1 】测试环境: SQL > desc user_order; Name Null ? Type ----------------------------------------- -------- ---------------------------- REGION_ID NUMBER ( 2 ) CUSTOMER_ID NUMBER ( 2 ) CUSTOMER_SALES NUMBER 【 2 】测试数据: SQL > select * from user_order order by customer_sales; REGION_ID CUSTOMER_ID CUSTOMER_SALES ---------- ----------- -------------- 5 1

Hive分析函数row_number()

会有一股神秘感。 提交于 2019-12-04 06:44:54
业务背景 最近有一个需求是给用户浏览的商品进行评分, 然后将商品评分按降序排序, 最后取 Top 50 推荐给终端用户。评分的计算公式为: 该商品一个月内的购买次数 / 该商品两个月内的浏览次数。在实现该需求的时候就用到了 Hive 中内置的分析函数 row_number()。 row_number()函数简介 row_number() 函数的简单用法如下: ROW_NUMBER() OVER (DISTRIBUTE BY COLUMN_A SORT BY COLUMN_B ASC/DESC) 说明: DISTRIBUTE BY COLUMN_A 的意思是按照 COLUMN_A 进行分组, SORT BY COLUMN_B 的意思是按照 COLUMN_B 进行排序, 后面跟着 ASC/DESC 指定是按照升序还是降序排序。row_number() 按指定的列进行分组生成行序列, 从 1 开始, 如果两行记录的分组列相同, 则行序列+1。 需求实现 数据表 user_item_score 结构大致如下: | user_id | item_id | item_score | | ----- |:---- :| ---- :| | U_AAAA | I_AAA1 | 0.5 | | U_BBBB | I_BBB1 | 0.3 | | U_AAAA | I_AAA2 | 0.6 | | U