当前位置:网站首页>MySQL面试真题(二十三)——拼多多-球赛分析

MySQL面试真题(二十三)——拼多多-球赛分析

2022-06-23 03:58:00 Socialphobia_FOGO

球赛分析

两只篮球队进行了激烈的比赛,比分交替上升。比赛结束后,你有一张两队分数的明细表:
在这里插入图片描述
该表记录了球队、球员号码、球员姓名、得分分数以及得分时间。现在球队要对比赛中表现突出的球员做出奖励。

问题:
(1)请你写一个sql语句统计出:比赛中帮助各自球队反超比分的球员姓名以及对应时间
(2)请你写一个sql语句统计出:连续三次(及以上)为球队得分的球员名单

#(1)请你写一个sql语句统计出:比赛中帮助各自球队反超比分的球员姓名以及对应时间
SELECT 球员姓名,得分时间
FROM
(SELECT *,
CASE WHEN 结果<>'平' AND 上次结果<>'平' AND 结果<>上次结果 THEN 1  
WHEN 结果<>'平' AND 上次结果='平' AND 结果<>前次结果 THEN 1
ELSE 0 END AS 判断
FROM
(SELECT *,
lag(结果,1)over(ORDER BY 得分时间) 上次结果,
lag(结果,2)over(ORDER BY 得分时间) 前次结果
FROM
(SELECT *,
CASE WHEN A队累计>B队累计 THEN 'A'
WHEN A队累计<B队累计 THEN 'B'
ELSE '平' END AS 结果
FROM
(SELECT *,
SUM(A队分数)over(ORDER BY 得分时间) AS A队累计,
SUM(B队分数)over(ORDER BY 得分时间) AS B队累计
FROM
(SELECT *,
CASE WHEN 球队='A' THEN 得分分数 ELSE 0 END AS A队分数,
CASE WHEN 球队='B' THEN 得分分数 ELSE 0 END AS B队分数
FROM 分数表
ORDER BY 得分时间)a)b)c)d)e
WHERE 判断=1

结果如下:
在这里插入图片描述

#(2)请你写一个sql语句统计出,连续三次(及以上)为球队得分的球员名单
SELECT DISTINCT 球队,球员姓名
FROM
(SELECT *,
lead(球员姓名,1)over(PARTITION BY 球队 ORDER BY 得分时间) 二次得分球员,
lead(球员姓名,2)over(PARTITION BY 球队 ORDER BY 得分时间) 三次得分球员
FROM 分数表)a
WHERE 球员姓名=二次得分球员
AND 二次得分球员=三次得分球员

结果如下:
在这里插入图片描述

原网站

版权声明
本文为[Socialphobia_FOGO]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46043195/article/details/125402275