SQL-拼多多 面试题:连续3次为球队得分的球员名单

两支篮球队进行了激烈的比赛,比分交替上升。比赛结束后,你有一个两队分数的明细表

表中记录了球队、球员号码、球员姓名、得分分数及得分时间。现在球队要对比赛中表现突出的球员进行奖励。

问题:请你写一个SQL语句,统计出连续3次为球队得分的球员名单。

输入: 球员得分表输出
TEAM_NAMEPLAYER_IDPLAYER_NAMESCORESCORE_TIMETEAM_NAMEPLAYER_NAME
洛杉矶湖人队23勒布朗·詹姆斯32023/12/25 10:00:00金州勇士队斯蒂芬·库里
洛杉矶湖人队23勒布朗·詹姆斯32023/12/25 10:15:00
洛杉矶湖人队23勒布朗·詹姆斯12023/12/25 10:30:00洛杉矶湖人队勒布朗·詹姆斯
洛杉矶湖人队3安东尼·戴维斯22023/12/25 10:32:00
洛杉矶湖人队23勒布朗·詹姆斯32023/12/25 10:45:00
洛杉矶湖人队23勒布朗·詹姆斯32023/12/25 11:00:00
洛杉矶湖人队23勒布朗·詹姆斯22023/12/25 11:15:00
洛杉矶湖人队23勒布朗·詹姆斯22023/12/25 11:30:00
金州勇士队30斯蒂芬·库里12023/12/25 10:10:00
金州勇士队30斯蒂芬·库里12023/12/25 10:25:00
金州勇士队30斯蒂芬·库里12023/12/25 10:40:00
金州勇士队11克莱·汤普森22023/12/25 10:45:00
金州勇士队30斯蒂芬·库里22023/12/25 10:55:00
金州勇士队30斯蒂芬·库里22023/12/25 11:10:00
金州勇士队30斯蒂芬·库里32023/12/25 11:25:00
金州勇士队30斯蒂芬·库里32023/12/25 11:40:00
金州勇士队30斯蒂芬·库里32023/12/25 11:55:00

 建表语句:

-- 创建分数表,并为列名增加注释
drop table t_score;

CREATE TABLE t_score (
    team_name VARCHAR2(50),
    player_id INT,
    player_name VARCHAR2(50),
    score INT,
    score_time TIMESTAMP
);

COMMENT ON COLUMN t_score.team_name IS '球队名称';
COMMENT ON COLUMN t_score.player_id IS '球员ID';
COMMENT ON COLUMN t_score.player_name IS '球员姓名';
COMMENT ON COLUMN t_score.score IS '得分';
COMMENT ON COLUMN t_score.score_time IS '得分时间';


INSERT INTO t_score VALUES ('洛杉矶湖人队', 23, '勒布朗·詹姆斯', 3, TO_TIMESTAMP('2023-12-25 10:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('洛杉矶湖人队', 23, '勒布朗·詹姆斯', 3, TO_TIMESTAMP('2023-12-25 10:15:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('洛杉矶湖人队', 23, '勒布朗·詹姆斯', 1, TO_TIMESTAMP('2023-12-25 10:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('洛杉矶湖人队', 3, '安东尼·戴维斯', 2, TO_TIMESTAMP('2023-12-25 10:32:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('洛杉矶湖人队', 23, '勒布朗·詹姆斯', 3, TO_TIMESTAMP('2023-12-25 10:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('洛杉矶湖人队', 23, '勒布朗·詹姆斯', 3, TO_TIMESTAMP('2023-12-25 11:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('洛杉矶湖人队', 23, '勒布朗·詹姆斯', 2, TO_TIMESTAMP('2023-12-25 11:15:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('洛杉矶湖人队', 23, '勒布朗·詹姆斯', 2, TO_TIMESTAMP('2023-12-25 11:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 1, TO_TIMESTAMP('2023-12-25 10:10:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 1, TO_TIMESTAMP('2023-12-25 10:25:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 1, TO_TIMESTAMP('2023-12-25 10:40:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 11, '克莱·汤普森', 2, TO_TIMESTAMP('2023-12-25 10:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 2, TO_TIMESTAMP('2023-12-25 10:55:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 2, TO_TIMESTAMP('2023-12-25 11:10:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 3, TO_TIMESTAMP('2023-12-25 11:25:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 3, TO_TIMESTAMP('2023-12-25 11:40:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO t_score VALUES ('金州勇士队', 30, '斯蒂芬·库里', 3, TO_TIMESTAMP('2023-12-25 11:55:00', 'YYYY-MM-DD HH24:MI:SS'));



-- 查询数据
SELECT * FROM t_score;

 分析:

        1.使用LAG开窗函数 筛选出 下一次和下下一次得分,并用进球时间进行排序

        2.使用where筛选出值得嘉奖的球员

WITH ScoreRanking AS (
    SELECT
        team_name,
        player_id,
        player_name,
        score_time,
        LAG(player_id, 1) OVER (PARTITION BY team_name ORDER BY score_time) AS prev_player_1,
        LAG(player_id, 2) OVER (PARTITION BY team_name ORDER BY score_time) AS prev_player_2
    FROM
        t_score
)
SELECT DISTINCT
    team_name,
    player_name
FROM
    ScoreRanking
WHERE
    player_id = prev_player_1
    AND player_id = prev_player_2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值