暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

阿里云SQL挑战赛

原创 like052 2023-06-14
667


1、根据得分表使用rank开窗函数进行分组排序,获取前三名的学生信息。

with w_a as
(
select d.*,rank() over(partition by testid order by d.score desc) num from testattempt d
)
select t.name test ,s.name student,a.score from w_a a,student s,test t where a.num<=3 and a.studentid=s.id and a.testid=t.id
;


2、使用开窗函数lead将最近的两条数据合并,日期相减如果<=7,即说明为一周内访问了两次,dense_rank用于统计排名,其max的值可认为是总的用户数,因此,SQL如下:

with w_lead AS
(
select d.*,row_number() over(partition by d.player_id order by d.`event_date` ) rnum,
lead(d.event_date) over(partition by d.player_id order by d.`event_date` ) lead_data ,
DENSE_RANK() over(order by d.`player_id`) dank
from `activity` d
)
select count(1)/(select max(dank) from w_lead) from w_lead l where l.lead_data is not null and l.rnum=1 and l.lead_data-l.event_date<=7 order by 1;

3、不会。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论