目录
测试创建测试表插入数据执行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后的查询结果(而不是基于每组组内的查询结果)。