• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

hive中使用标准sql实现分组内排序

mysql 搞代码 4年前 (2022-01-09) 31次浏览 已收录 0个评论

hive中使用标准sql实现分组内排序 在hive中,想要实现分组内排序,一般都是自己写udf实现oracle中分析函数row_number() over(partition)的功能,如果不使用自定义udf,仅使用标准sql实现的话,毫无性能可言,仅做实验而已。 方便起见,以下语句为oracle中语句

hive中使用标准sql实现分组内排序

在hive中,想要实现分组内排序,一般都是自己写udf实现oracle中分析函数row_number() over(partition)的功能,如果不使用自定义udf,仅使用标准sql实现的话,毫无性能可言,仅做实验而已。

方便起见,以下语句为oracle中语句,但都属于标准sql,在hive中亦可:

Sql代码

CREATE TABLE lxw_t (user_id VARCHAR2(20),

class VARCHAR2(20),

score NUMBER

);

Sql代码

INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','语文','90');

INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','数学','86');

INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','英语','96');

INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','体育','77');

INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','语文','88');

INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','数学','65');

INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','英语','67');

INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','体育','98');

commit;

Sql代码

SELECT x.user_id,x.class,x.score,COUNT(1) AS seq

FROM (

SELECT a.*,b.score score2 FROM

liuxiaowen.lxw_t a ,

liuxiaowen.lxw_t b

WHERE a.user_id = b.user_id (+)

) x

WHERE x.score2 >= x.score –按照成绩由高到低排列

–WHERE x.score >= x.score2 –按照成绩由低到高排列

GROUP BY x.user_id,x.class,x.score

order BY 1,4

按照成绩由高到低排列的结果如下:

Sql代码

USER_ID CLASS SCORE SEQ

user_1 英语 96 1

user_1 语文 90 2

user_1 数学 86 3

user_1 体育 77 4

user_2 体育 98 1

user_2 本文来源gao@!dai!ma.com搞$$代^@码!网 语文 88 2

user_2 英语 67 3

user_2 数学 65 4

按照成绩由低到高排列的结果如下:

Sql代码

USER_ID CLASS SCORE SEQ

user_1 体育 77 1

user_1 数学 86 2

user_1 语文 90 3

user_1 英语 96 4

user_2 数学 65 1

user_2 英语 67 2

user_2 语文 88 3

user_2 体育 98 4


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:hive中使用标准sql实现分组内排序

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址