Hive面试场景题

文章讲述了如何使用SQL查询在给定数据表中进行复杂的数据处理,包括找出每门学科的第一名和最后一名学生、去除最低分和最高分后计算平均分,以及根据理财产品历史数据填充未来日期的利率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目背景:一张表里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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值