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

阿里云sql挑战赛

原创 Lpl 2023-06-14
1113

赛题 1:找出各项考试中的佼佼者

DMS截图

Pasted image 20230613012452.png

SQL源码

WITH RankResult AS ( SELECT RANK() OVER ( PARTITION BY testId ORDER BY score DESC ) as rank_num, testId, studentId, score FROM ( SELECT testId, studentId, MAX(score) as score FROM TestAttempt ta GROUP BY testId, studentId ) t1 ) SELECT t.name as testname, s.name as studentname, r.score FROM RankResult r LEFT JOIN Test t ON r.testId = t.id LEFT JOIN Student s ON r.studentId = s.id WHERE rank_num <= 3

解题思路

1、同一考生在一门考试中可能有多个成绩,且结果仅需要最高分,所以通过GROUP BY和MAX()函数得到每个考生在每一门考试的最高分;
2、对于并列的情况,需要全部列举出来,并且当列举的考生达到或超过了三名,不再列举后面排名的考生,所以使用rank()函数对步骤1中的结果进行不连续排序,得到每门考试的考生的排名;
3、筛选出排序前三的结果,即得到每门考试得分排名前三的考生。

赛题 2:游戏游玩情况

DMS截图

Pasted image 20230613111131.png

SQL源码

WITH T1 AS ( SELECT player_id, MIN(event_date) as min_date FROM Activity a GROUP BY player_id ), T2 AS ( SELECT a.player_id, DATEDIFF(a.event_date, b.min_date) as diff_date FROM Activity a LEFT JOIN T1 b ON a.player_id = b.player_id ) SELECT ROUND( COUNT(DISTINCT player_id) / ( SELECT COUNT(DISTINCT player_id) FROM Activity ), 2 ) FROM T2 WHERE diff_date > 0 AND diff_date <= 7

解题思路

1、通过GROUP BY和MIN()函数,得到玩家首次游玩的时间;
2、使用DATEDIFF()函数将玩家游玩时间与首次游玩时间做差,得到玩家每次游玩时间与首次游玩时间差了多少天;
3、筛选出相差天数大于0但小于等于7的结果,并去重统计玩家数,即为首次游玩后的一周内至少再有一次游玩的玩家数量,最后除以总玩家数得到比例。

赛题 3:计算三角形面积

DMS截图

Pasted image 20230613125401.png

SQL源码

WITH T1 AS ( SELECT t.id, SQRT( POWER((p1.x - p2.x), 2) + POWER((p1.y - p2.y), 2) + POWER((p1.z - p2.z), 2) ) as a, SQRT( POWER((p1.x - p3.x), 2) + POWER((p1.y - p3.y), 2) + POWER((p1.z - p3.z), 2) ) as b, SQRT( POWER((p2.x - p3.x), 2) + POWER((p2.y - p3.y), 2) + POWER((p2.z - p3.z), 2) ) as c FROM Triangle t LEFT JOIN Point p1 ON t.pointId1 = p1.id LEFT JOIN Point p2 ON t.pointId2 = p2.id LEFT JOIN Point p3 ON t.pointId3 = p3.id ), T2 as ( SELECT id, a, b, c, (a + b + c) / 2 as p FROM T1 ) SELECT id, ROUND(SQRT(p * (p - a) * (p - b) * (p - c)), 2) as S FROM T2

解题思路

1、将三角形表与顶点表相关联,得到三角形每个顶点的坐标信息,再根据三维坐标中计算线段长度的公式,计算出三角形三条边的长度;
2、根据三角形三条边的长度,使用海伦公式计算三角形的面积。

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

评论