来道面试题

面试题目

有一场篮球赛,参赛双方是A队和B队,场边记录员记录下了每次得分的详细信息:
team:队名
number:球衣号,
name:球员姓名,
score_time:得分时间,
score:当次得分

问(用sql表达):
1)输出每一次的比分的反超时刻,以及对应的完成反超的球员姓名
2)输出连续三次或以上得分的球员姓名,以及那一拨连续得分的数值

答案

with detail as (
select '18:30:00' as game_time , 'Lakers' as team_name, 'kebo' as player , 2 as score
union all select '18:31:05' as game_time , 'Lakers' as team_name , 'kebo' as player , 2 as score
union all select '18:31:21' as game_time , '76ers' as team_name , 'Iversion' as player , 2 as score
union all select '18:31:31' as game_time , '76ers' as team_name , 'JR' as player , 2 as score
union all select '18:31:41' as game_time , 'Lakers' as team_name , 'Fisher' as player , 2 as score
union all select '18:31:51' as game_time , 'Lakers' as team_name , 'Fisher' as player , 2 as score
union all select '18:32:00' as game_time , '76ers' as team_name , 'Iversion' as player , 3 as score
union all select '18:32:10' as game_time , '76ers' as team_name , 'Iversion' as player , 3 as score
), team_score as (
select game_time
      ,team_name
	  ,player
	  ,score
from detail 
), d_team_score as (
select game_time
      ,team_name
	  ,player
	  ,score
	  ,sum(case when team_name = 'Lakers' then score else 0 end ) over(order by game_time) as lakers_team_score 
	  ,sum(case when team_name = '76ers' then score else 0 end ) over(order by game_time) as ssers_team_score 
from team_score
), dd_team_score as (
select game_time
      ,team_name
	  ,player
	  ,score
	  ,lakers_team_score
	  ,ssers_team_score
	  ,lakers_team_score - ssers_team_score as D_value
from d_team_score
), ddd_team_score as (
select game_time
      ,team_name
	  ,player
	  ,score
	  ,lakers_team_score
	  ,ssers_team_score
	  ,D_value
	  ,lag(D_value,1,0) over(order by game_time) as pre_D_value
from dd_team_score
)
select game_time
      ,team_name
	  ,player
	  ,score
	  ,lakers_team_score
	  ,ssers_team_score
	  ,D_value
	  ,pre_D_value
from ddd_team_score
where D_value*pre_D_value < 0 
with detail as (
select '18:30:00' as game_time , 'Lakers' as team_name, 'kebo' as player , 2 as score
union all select '18:31:05' as game_time , 'Lakers' as team_name , 'kebo' as player , 2 as score
union all select '18:31:21' as game_time , '76ers' as team_name , 'Iversion' as player , 2 as score
union all select '18:31:31' as game_time , '76ers' as team_name , 'JR' as player , 2 as score
union all select '18:31:41' as game_time , 'Lakers' as team_name , 'Fisher' as player , 2 as score
union all select '18:31:51' as game_time , 'Lakers' as team_name , 'Fisher' as player , 2 as score
union all select '18:32:00' as game_time , '76ers' as team_name , 'Iversion' as player , 3 as score
union all select '18:32:10' as game_time , '76ers' as team_name , 'Iversion' as player , 3 as score
union all select '18:33:05' as game_time , 'Lakers' as team_name , 'kebo' as player , 2 as score
union all select '18:33:06' as game_time , 'Lakers' as team_name , 'kebo' as player , 2 as score
union all select '18:33:08' as game_time , 'Lakers' as team_name , 'kebo' as player , 2 as score
union all select '18:34:10' as game_time , '76ers' as team_name , 'Iversion' as player , 1 as score
union all select '18:35:31' as game_time , '76ers' as team_name , 'JR' as player , 2 as score
), d_detail as (
select game_time
      ,team_name
	  ,player
	  ,score
	  ,ROW_NUMBER() over(partition by team_name order by game_time) - ROW_NUMBER() over(partition by player order by game_time) as D_value
from detail
) , rs as (
select game_time
      ,team_name
	  ,player
	  ,score
	  ,D_value 
	  ,sum(1) over(partition by player ,D_value ) as score_time 
	  ,sum(score) over(partition by player ,D_value ) as score_sum 
from d_detail 
)
select *
from rs 
 where score_time>=3
 order by player 
 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值