hive 分组排序,topN

语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rank
partition by:类似hive的建表,分区的意思;
order by :排序,默认是升序,加desc降序;
rank:表示别名
表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

-- 分组排序
-- 求某用户日期最大的3天
select a.* from(
select p_day,muuid,row_number() over(partition by muuid order by p_day) rank
from test
group by p_day,muuid)a
where a.rank <=3;
---- 获取每天充值数的前3名
select * from(
select p_day,muuid,c row_number over(partition by p_day order by p_day,c desc) ord
from(
select p_day,muuid,count(1) c from test where p_day>‘2017-09-09‘
group by p_day,muuid
) t1
)t2
where ord <= 3;

时间: 2024-08-08 15:42:13

hive 分组排序,topN的相关文章

hive分组排序函数 分组取top10

hive分组排序函数 分组取top10 语法:row_number() over( partition by 字段a order by 计算项b desc) rank --这里rank是别名 Partition by:类似hive的建表,分区的意思 这里按字段a分区,对计算项b进行降序排序 实例: 要取top10品牌,各品牌的top10渠道,各品牌的top10渠道中各渠道的top10档期 1) 取top10品牌 Select 品牌,count/sum/其他() as num from tb_na

Hive分组取Top N

Hive在0.11.0版本开始加入了row_number.rank.dense_rank分析函数,可以查询分组排序后的top值 说明: row_number() over ([partition col1] [order by col2]) rank() over ([partition col1] [order by col2]) dense_rank() over ([partition col1] [order by col2]) 它们都是根据col1字段分组,然后对col2字段进行排序,

本地化下按首字母分组排序的神器——UILocalizedIndexedCollation

最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引.因为按照我一贯的的做法,都是想要做成更通用的.支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多也就认识中文和英语,这就不能用以前的那些比如把汉字转成拼音再排序的方法了,效率不高不说,对其他国家的本地化更是行不通.一个偶然的机会,我才发现SDK里已经提供了一个实现此功能的神器——UILocalizedIndexedCollation. 首先提一下,UILocalizedIndexedColla

MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

网上看见了好多例子都基本上是一样的,没有过多的解释,对于一个初学MySQL来说有点难,我把部分转摘过来如下 原文:http://www.cnblogs.com/buro79xxd/archive/2012/08/29/2662489.html 要求目标:1.确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次. 创建表格:2.来创建实例数据: drop table if exists heyf_t10; create table heyf_t10 (empid int ,deptid i

sql server 中判断分组排序的使用示例

现在需要查询一组数据,是对一列字段(column01)的数据分范围查询后分组排序: select (case when [column01] >0 AND [column01]<= 500 THEN 1 when [column01] >500 AND [column01]<= 1000 THEN 2 when [column01] >1000 AND [column01]<= 5000 THEN 3 when [column01] >5000 AND [colu

对数据库表中的某一字段去重分组排序

1.问题背景    某数据库t_tab_ab中有两个字段a和b,如下所示:    查询前:                 查询后:    a     b                  a     b    1     2                  1     2    1     3                  2     3    1     4                  3     4    1     5    2     3    2     4    2  

MySql 分组排序取时间最大的一条记录

SELECT A.* FROM digital_asset A, (SELECT name, max(last_updated) max_day FROM digital_asset GROUP BY name) B WHERE A.name = B.name AND A.last_updated = B.max_day SELECT A . * FROM bbs_threads A, ( SELECT digest, max( dateline ) max_dateline FROM bbs_

分组排序取次数

原文:分组排序取次数 函数 row_number() row_number() over (partition by patient_id /*需要分组的列*/ order by zyid /*排序的列*/) sqlSELECT ZYID, patient_id ,row_number() over (partition by patient_id order by zyid) visit_id from jk_patient_in_hospital oracle create or repla

【记录】T-SQL 分组排序中取出最新数据

原文:[记录]T-SQL 分组排序中取出最新数据 示例 Product 表结构: 示例 Product 表数据: 想要的效果是,以 GroupName 字段分组,取出分组中通过 Sort 降序最新的数据,通过示例数据,可以推算出结果数据的 ID 应该为:7.5.3. 示例 SQL 代码: select * from Product p where ID=(select top 1 ID from Product where p.GroupName=GroupName order by Sort