HIVE SQL使用row_number()语法查询每种定义方式下,每种视频类型下对应的总播放时长

背景

当前有两张表如下:

在这里插入图片描述

id表示视频id,tag_type表示这种标签是谁定义的,content_tag表示的是视频类型。

在这里插入图片描述

vv表示视频播放量,id表示视频id。

需求1:查询每种视频类型下对应的总播放时长top3

SELECT  A.content_tag AS content_tag
       ,SUM(A.vv)     AS vv_sum
FROM
(
	SELECT  A.id     AS id
	       ,A.content_tag AS content_tag
	       ,SUM(B.vv)     AS vv
	FROM
	(
		SELECT  id
		       ,content_tag
		FROM label_table
	) A
	JOIN
	(
		
### HiveSQL 中 `ROW_NUMBER()` 函数的用法 `ROW_NUMBER()` 是窗口函数之一,在HiveSQL中用于为查询的结果集中的每一行分配唯一的行号。此功能通常与其他聚合操作一起使用,以便更好地控制数据排序和分组。 #### 基本语法 ```sql ROW_NUMBER() OVER ([partition_by_clause] order_by_clause) ``` - **PARTITION BY**: 可选项,定义分区逻辑,即在哪个层次上重新编号。 - **ORDER BY**: 必填项,规定如何对记录进行排序来决定行号顺序。 #### 实际应用案例 假设有一个名为 `ExamResult` 的表,其中包含学生考试的成绩信息: | StudentName | Subject | Marks | |-------------|-------------|-------| | Alice | Math | 90 | | Bob | English | 85 | | Charlie | Science | 78 | 为了给每位考生按照分数高低排名次,可以执行如下命令: ```sql SELECT StudentName, Subject, Marks, ROW_NUMBER() OVER (ORDER BY Marks DESC) AS Rank FROM ExamResult; ``` 这会返回带有新列 `Rank` 的结果集,表示基于成绩降序排列后的名次[^3]。 如果希望按科目对学生打分做单独排名,则可以在 `OVER` 子句里加入 `PARTITION BY` 来实现更细粒度的操作: ```sql SELECT StudentName, Subject, Marks, ROW_NUMBER() OVER(PARTITION BY Subject ORDER BY Marks DESC) AS Subject_Rank FROM ExamResult; ``` 上述语句将会针对不同学科分别计算排名,并且每门课程内部保持独立计数。 需要注意的是,虽然 `ROW_NUMBER()` 提供了强大的灵活性,但在处理大规模数据集时性能表现可能不如其他方法理想。对于非常大的表格来说,应该评估实际需并考虑优化策略或替代方案[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值