当前位置:网站首页>AB球队得分流水表,得到连续三次得分的队员名字 和每次赶超对手的球员名字(pdd)
AB球队得分流水表,得到连续三次得分的队员名字 和每次赶超对手的球员名字(pdd)
2022-07-23 19:46:00 【南湖渔歌】
AB球队得分流水表,得到连续三次得分的队员名字 和每次赶超对手的球员名字(pdd)
在复盘时发现有类似原题,这是我在面试中遇到的最难的题
问题:两支篮球队进行了激烈的篮球比赛,比分交替上升。比赛结束后,你有一张两队得分分数的明细表,记录了球队team,球员号码number,球员姓名name, 得分分数score 以及得分时间scoretime(datetime)。现在球队要对比赛中表现突出的球员做出嘉奖,所以请你用sql统计出
1)连续三次(及以上)为球队得分的球员名单
-- 从两队的整体作为时间连续考虑:
select distinct name
from
(
select *
,row_number()over(order by score_time asc) as rank1
,row_number()over(partition by `team`,`number` order by score_time asc ) rank2
,(row_number()over(order by score_time asc) - row_number()over(partition by `team`,`number` order by score_time asc )) as diff
from basketball_game_score_detail
)t
group by diff,name
having count(1) >=3 ;
-- 从自身所在的队的作为时间连续考虑:
# 我的求解思路:
select distinct name
from
(
select *
,row_number()over(partition by team order by score_time asc) as rank1
,row_number()over(partition by team,`number` order by score_time asc ) rank2
,(row_number()over(partition by team order by score_time asc) -
row_number()over(partition by `team`,`number` order by score_time asc )) as diff
from basketball_game_score_detail
)t
group by diff,name
having count(1) >=3 ;
# 另外一位作者的求解思路也是可以的:
select distinct a.name ,a.team from
(
select *
,lead(name,1) over(partition by team order by score_time) as ld1
,lead(name,2) over(partition by team order by score_time) as ld2
,lag(name,1) over(partition by team order by score_time) as lg1
,lag(name,2) over(partition by team order by score_time) as lg2
from basketball_game_score_detail
) a
where (a.name = a.ld1 and a.name = a.ld2) -- case1:比较当前记录与下两个记录
or (a.name = a.ld1 and a.name = a.lg1) -- case2:比较当前记录与上一个记录和下一个记录
or (a.name = a.lg1 and a.name = a.lg2);-- case3:比较当前记录与上两个记录
-- where a.name =a.ld1 or a.name=a.lg1 ; 如果求相邻3个以下
2)比赛中帮助各自球队反超比分的球员姓名以及对应时间。
select team
,`number`
,score_time
,name
,A_score_acum
,B_score_acum
,score_gap
,last_score_gap
,score_gap * last_score_gap as product
from
(
select *
,(A_score_acum - B_score_acum) as score_gap
,lag(A_score_acum-B_score_acum,1)over(order by score_time) as last_score_gap
from
(
select *
,case when team='A' then score else 0 end as A_score
,case when team='B' then score else 0 end as B_score
,sum(case when team='A' then score else 0 end)over(order by score_time) as A_score_acum
,sum(case when team='B' then score else 0 end)over(order by score_time) as B_score_acum
from basketball_game_score_detail
) t1
)t2
where score_gap != 0 # 换成 (A_score_acum - B_score_acum) <> 0 亦可
and score_gap * last_score_gap <= 0; # 必须要包含0
实验数据:
CREATE TABLE basketball_game_score_detail(
team VARCHAR(40) NOT NULL ,
number VARCHAR(100) NOT NULL,
score_time datetime NOT NULL,
score int NOT NULL,
name varchar(100) NOT NULL
);
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:01:14',1,'A1');
insert into basketball_game_score_detail values('A',5,'2020/8/28 9:02:28',1,'A5');
insert into basketball_game_score_detail values('B',4,'2020/8/28 9:03:42',3,'B4');
insert into basketball_game_score_detail values('A',4,'2020/8/28 9:04:55',3,'A4');
insert into basketball_game_score_detail values('B',1,'2020/8/28 9:06:09',3,'B1');
insert into basketball_game_score_detail values('A',3,'2020/8/28 9:07:23',3,'A3');
insert into basketball_game_score_detail values('A',4,'2020/8/28 9:08:37',3,'A4');
insert into basketball_game_score_detail values('B',1,'2020/8/28 9:09:51',2,'B1');
insert into basketball_game_score_detail values('B',2,'2020/8/28 9:11:05',2,'B2');
insert into basketball_game_score_detail values('B',4,'2020/8/28 9:12:18',1,'B4');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:13:32',2,'A1');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:14:46',1,'A1');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:14:59',1,'A1');
insert into basketball_game_score_detail values('A',4,'2020/8/28 9:16:00',1,'A4');
insert into basketball_game_score_detail values('B',3,'2020/8/28 9:17:14',3,'B3');
insert into basketball_game_score_detail values('B',2,'2020/8/28 9:18:28',3,'B2');
insert into basketball_game_score_detail values('A',2,'2020/8/28 9:19:42',3,'A2');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:20:55',1,'A1');
insert into basketball_game_score_detail values('B',3,'2020/8/28 9:22:09',2,'B3');
insert into basketball_game_score_detail values('B',3,'2020/8/28 9:23:23',3,'B3');
insert into basketball_game_score_detail values('A',5,'2020/8/28 9:24:37',2,'A5');
insert into basketball_game_score_detail values('B',1,'2020/8/28 9:25:51',3,'B1');
insert into basketball_game_score_detail values('B',2,'2020/8/28 9:27:05',1,'B2');
insert into basketball_game_score_detail values('A',3,'2020/8/28 9:28:18',1,'A3');
insert into basketball_game_score_detail values('B',4,'2020/8/28 9:29:32',1,'B4');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:30:46',3,'A1');
insert into basketball_game_score_detail values('B',1,'2020/8/28 9:32:00',1,'B1');
insert into basketball_game_score_detail values('A',4,'2020/8/28 9:33:14',2,'A4');
insert into basketball_game_score_detail values('B',1,'2020/8/28 9:34:28',1,'B1');
insert into basketball_game_score_detail values('B',5,'2020/8/28 9:35:42',2,'B5');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:36:55',1,'A1');
insert into basketball_game_score_detail values('B',1,'2020/8/28 9:38:09',3,'B1');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:39:23',3,'A1');
insert into basketball_game_score_detail values('B',2,'2020/8/28 9:40:37',3,'B2');
insert into basketball_game_score_detail values('A',3,'2020/8/28 9:41:51',3,'A3');
insert into basketball_game_score_detail values('A',1,'2020/8/28 9:43:05',2,'A1');
insert into basketball_game_score_detail values('B',3,'2020/8/28 9:44:18',3,'B3');
insert into basketball_game_score_detail values('A',5,'2020/8/28 9:45:32',2,'A5');
insert into basketball_game_score_detail values('B',5,'2020/8/28 9:46:46',3,'B5');
https://mp.weixin.qq.com/s/PfOFMGJeomIfEMT2Atg6Xw(挑战完毕)
边栏推荐
猜你喜欢

Leetcode 238. 除自身以外数组的乘积

使用Jmeter和VisualVW进行压测准备

QT下assimp库的模型加载

What if there is no word document in win11? There is no word document solution tutorial in win11

Complex data processing of multi subsystem and multi business modules -- project development practice based on instruction set Internet of things operating system

Energy principle and variational method note 14: summary + problem solving

osgearth使用sundog公司的triton海洋和silverlining云彩效果

Leetcode 152. product maximum subarray (brute force cracking can actually pass!)

源启数字化:既有模式,还是开源创新?|砺夏行动

Edge cloud | 1. overview
随机推荐
Meiker Studio - Huawei 14 day Hongmeng equipment development practical notes 5
Discussion on the usage of scanf () and getchar ()
千呼万唤,5G双卡双通到底有多重要?
Viewing the "Empathy" energy of iqoo 10 pro from 200W super flash charging
Training log on July 22, 2022
不用MQTT C库就能实现MQTT连接、订阅和发布
【AR学习】-- 二、 环境搭建
shell脚本中$#、$*、[email protected]、$?、$0等含义一文搞懂
2022DASCTF MAY
Debian | Can’t locate Debian/Debhelper/Sequence/germinate.pm in @INC
TASK03|回归
海通证券股票开户怎么样安全吗
如何合理地估算线程池大小
数组——209.长度最小的子数组
Drools(1):Drools简介
2022 Shandong elderly care exhibition, China International elderly care service industry exhibition, Jinan elderly care industry exhibition
Failure after reinstalling the system (error: Reboot and select proper boot device or insert boot media in selected boot device)
What if there is no word document in win11? There is no word document solution tutorial in win11
【Unity项目实践】关卡解锁
121. 买卖股票的最佳时机