题目背景:一张表里3个字段,学生姓名、学科、分数,表数据如下:
问题一:求每门学科第一名和最后一名学生,如果有多个,拼一起
select
score
,subjet
,collect_set(if(score = maxScore,student,student))
from
(select
student,
score,
subjet,
min(score) over(partition by subjet) as minScore,
max(score) over(partition by subjet) as maxScore
from pritice_test1) t1
where (score = minScore) or (score = maxScore)
group by subjet,score;
结果:
问题二:求每门学科去除最低分最高分后的平均分
select
student,
score,
subjet,
avg(score) over(partition by subjet)
from
(select
student,
score,
subjet,
rank() over (partition by subjet order by score) as minFlag,
rank() over (partition by subjet order by score desc) as maxFlag
from pritice_test1) t1
where minFlag > 1 and maxFlag > 1;
结果:
问题三:求所有学科成绩都高于90分的学生信息
select
student,
score,
subjet
from
(select
student,
score,
subjet,
min(score) over(partition by student) minScore
from pritice_test1) t1
where minScore>90;
结果:
题目背景:一张表里三个字段,数据日期、理财产品、利率
数据日期 理财产品 利率
2022-05-25 1001 2.7
2020-02-04 1001 2.4
2022-07-06 1002 2.2
2021-03-12 1002 2.4
现要求填充处理成如下(假设今日为2024-05-23):
2024-05-23 1001 2.7
2024-05-23 1001 2.7
....
2022-05-25 1001 2.7
2022-05-24 1001 2.4
2022-05-23 1001 2.4
...
2020-02-05 1001 2.4
2020-02-04 1001 2.4
2024-05-23 1002 2.2
2024-05-22 1002 2.2
...
2022-07-06 1002 2.2
2022-07-05 1002 2.4
2022-07-04 1002 2.4
...
2021-03-12 1002 2.4
select
product
,date_add(start_date, idx) as date
,rate
from (
select
product
,date as start_date
,lead(d_date,1,current_date) over (partition by productorder by d_date) end_date
,rate
from table
) t1
lateral view posexplode(split(space(datediff(end_date,start_date)-1),'')) tt as idx,v