hive 窗口函数 和 group by 一块使用

tech2026-02-11  2

目录

测试创建测试表插入数据执行sql结果 总结

测试

创建测试表

create table px_data_test_temp.temp_stu_attendance_tb ( date_col string, stu_no string, is_attendence string );

插入数据

insert into px_data_test_temp.temp_stu_attendance_tb (date_col, stu_no, is_attendence) values ('2019-11-01','STU-00001','上课'), ('2019-11-02','STU-00001','上课'), ('2019-11-03','STU-00001','缺勤'), ('2019-11-04','STU-00001','上课'), ('2019-11-05','STU-00001','上课'), ('2019-11-06','STU-00001','上课'), ('2019-11-07','STU-00001','上课'), ('2019-11-08','STU-00001','上课'), ('2019-11-09','STU-00001','缺勤'), ('2019-11-10','STU-00001','缺勤'), ('2019-11-11','STU-00001','上课'), ('2019-11-12','STU-00001','上课'), ('2019-11-13','STU-00001','上课'), ('2019-11-14','STU-00001','上课'), ('2019-11-15','STU-00001','缺勤'), ('2019-11-16','STU-00001','缺勤'), ('2019-11-17','STU-00001','缺勤'), ('2019-11-18','STU-00001','上课'), ('2019-11-19','STU-00001','上课'), ('2019-11-20','STU-00001','上课'), ('2019-11-01','STU-00002','上课'), ('2019-11-02','STU-00002','缺勤'), ('2019-11-03','STU-00002','缺勤'), ('2019-11-04','STU-00002','上课'), ('2019-11-05','STU-00002','上课'), ('2019-11-06','STU-00002','上课'), ('2019-11-07','STU-00002','上课'), ('2019-11-08','STU-00002','上课'), ('2019-11-09','STU-00002','缺勤'), ('2019-11-10','STU-00002','缺勤'), ('2019-11-11','STU-00002','上课'), ('2019-11-12','STU-00002','上课'), ('2019-11-13','STU-00002','上课'), ('2019-11-14','STU-00002','上课'), ('2019-11-15','STU-00002','上课'), ('2019-11-16','STU-00002','缺勤'), ('2019-11-17','STU-00002','缺勤'), ('2019-11-18','STU-00002','上课'), ('2019-11-19','STU-00002','上课'), ('2019-11-20','STU-00002','上课');

执行sql

select date_col, count(*) as total, row_number() over (order by date_col) as rn from temp_stu_attendance_tb where is_attendence = '上课' group by date_col;

结果

date_col total rn 2019-11-01 2 1 2019-11-02 1 2 2019-11-04 2 3 2019-11-05 2 4 2019-11-06 2 5 2019-11-07 2 6 2019-11-08 2 7 2019-11-11 2 8 2019-11-12 2 9 2019-11-13 2 10 2019-11-14 2 11 2019-11-15 1 12 2019-11-18 2 13 2019-11-19 2 14 2019-11-20 2 15

总结

1、窗口函数是写在select子句中的,而窗口函数开窗范围是基于后面的所有查询结果。对每行结果进行开窗操作,然后每行都在这个窗口范围内执行聚合函数进行统计。统计结果作为这一行的一个字段值。

2、窗口函数与group by一起使用并不冲突。窗口函数也是基于整个group by后的查询结果(而不是基于每组组内的查询结果)。

最新回复(0)