SQL数据库刷题sql_day33(连续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

 数据准备

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




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

分析

连续问题可以构造等差数列

①先跟据球队分组求出一个各队员按照时间顺序的一个排名

SELECT *,
                   row_number() over (partition by team_name order by score_time)           r1,
                   row_number() over (partition by team_name,player_id order by score_time) r2
            FROM t_score

②通过差值可以判断出是否连续

 with t1 as (SELECT *,
                    row_number() over (partition by team_name order by score_time)           r1,
                    row_number() over (partition by team_name,player_id order by score_time) r2
             FROM t_score)
#     , t2 as (
    select team_name, player_id, player_name, score_time, r1 - r2 r3
             from t1

③此时差值相同的个数就是连续得分次数 

通过对r3列求和去重 找出count(r3) >= 3 的数据

select team_name, player_id, player_name
from t2
group by team_name, player_id, player_name
having count(r3) >= 3

代码

 with t1 as (SELECT *,
                    row_number() over (partition by team_name order by score_time)           r1,
                    row_number() over (partition by team_name,player_id order by score_time) r2
             FROM t_score)
    , t2 as (select team_name, player_id, player_name, score_time, r1 - r2 r3
             from t1)
 select team_name, player_id, player_name
 from t2
 group by team_name, player_id, player_name
 having count(r3) >= 3
;

总结

①对数据进行去重可以使用

  • distinct
  • group by 分组
  • 窗口函数对去重列 排序(row_number)和编号再筛选
  • 子查询 in  、 exists
  • 创建一个临时表或派生表,其中只包含唯一的记录,然后从这个临时表中查询数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/891347.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用最短长度的绳子把整个花园围起来

给定一个数组 trees,其中 trees[i] [xi, yi] 表示树在花园中的位置。 你被要求用最短长度的绳子把整个花园围起来,因为绳子很贵。只有把 所有的树都围起来,花园才围得很好。 返回恰好位于围栏周边的树木的坐标。 示例 1: 输入: points […

MySQL 的数据类型

1.整数类型 1.1 tinyint tinyint 为小整数类型,存储空间为1个字节(8位),有符号范围-128 ~ 127,无符号范围 0 ~ 255,此类型通常在数据库中表示类型的字段,如某一字段 type 表示学科,其中 “type1” 表示语文…

实战篇:(二)React 创建项目并连接 MySQL 后台的实战教程

React 创建项目并连接 MySQL 后台的实战教程 一、项目概述 本篇博客将介绍如何使用 React 搭建前端项目,并通过 Node.js 和 MySQL 实现简单的后台数据连接。通过这个项目,你将掌握从前端到后端数据库的基础开发流程,适合初学者或正在项目实…

中国各大一线及二线省会城市程序员收入大比拼,看看你所在的城市的统计是否准确

在中国,程序员的收入因城市、经验、学历等因素而有所不同。本文将对一线及二线省会城市的程序员收入进行详细比较,帮助大家了解各地的薪资水平。 一线城市程序员收入 上海 上海作为中国的经济中心,程序员收入最高。根据最新数据&#xff…

新生编程入门的方式探讨

关于如何编程入门,这是一个很好的问题。在上大学之前,并没有怎么接触电脑的我,也许可以谈一谈。 还记得在高中的时候,因为很多同学去网吧玩电脑打游戏,被学校开除,老师谆谆教诲大家不要去网吧,所…

Word粘贴时出现“文件未找到:MathPage.WLL”的解决方案

解决方案 一、首先确定自己电脑的位数(这里默认大家的电脑都是64位)二、右击MathType桌面图标,点击“打开文件所在位置”,然后分别找到MathPage.WLL三、把这个文件复制到该目录下:C:\Program Files\Microsoft Office\r…

SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射(ORM)框架,它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。本文将详细介绍SQLAlchemy的安装、配置及基本使用方法,并通过代码示例和案例分析,帮助新…

SSL---SSL certificate problem

0 Preface/Foreword 0.1 SSL certificate problem 开发过程中,gitlab-runner连接gitlab时候出现SSL 证书问题。 场景:公司的gitlab runner服务器引入了SSL证书,每年都会主动更新一次。当前的gitlab-runner运行在PC机器上,但是g…

论文翻译 | OpenICL: An Open-Source Framework for In-context Learning

摘要 近年来,上下文学习(In-context Learning,ICL)越来越受到关注,并已成为大型语言模型(Large Language Model,LLM)评估的新范式。与传统微调方法不同,ICL无需更新任何参…

如何用好 CloudFlare 的速率限制防御攻击

最近也不知道咋回事儿,群里好多站长都反映被CC 攻击了。有人说依旧是 PCDN 干的,但明月感觉不像,因为有几个站长被 CC 攻击都是各种动态请求(这里的动态请求指的是.php 文件的请求)。经常被攻击的站长们都知道,WordPress /Typecho 这类动态博客系统最怕的就是这种动态请求…

C++模板初阶,只需稍微学习;直接起飞;泛型编程

🤓泛型编程 假设像以前交换两个函数需要,函数写很多个或者要重载很多个;那么有什么办法实现一个通用的函数呢? void Swap(int& x, int& y) {int tmp x;x y;y tmp; } void Swap(double& x, double& y) {doubl…

【自然语言处理】多头注意力Multi-Head Attention机制

多头注意力(Multi-Head Attention)机制是Transformer模型中的一个关键组件,广泛用于自然语言处理任务(如机器翻译、文本生成等)以及图像处理任务。它的核心思想是通过多个不同的注意力头来捕获输入的不同特征&#xff…

MedSAM2调试安装与使用记录

目录 前言一、环境准备多版本cuda切换切换cuda版本二 安装CUDNN2.1 检查cudnn 二、使用步骤1.安装虚拟环境2.测试Gradio3.推理 总结 前言 我们在解读完MedSAM之后,迫不及待想尝尝这个技术带来的福音,因此验证下是否真的那么6。这不,新鲜的使…

使用 KVM 在 Xubuntu 上创建 Windows 10 虚拟机

目录 前言说明注意准备 iso官网思博主(嘻嘻)拖动到虚拟机里面启动 virt-manager创建虚拟机选择本地安装介质选择 iso配置 内存 和 CPU选择 创建的虚拟机 保存的位置启动虚拟机看到熟悉的 Win10界面点击现在安装点击我没有产品密钥选择 Win10 专业工作站版勾选接受许可条款选择自…

《智慧博物馆:科技与文化的完美融合》

《智慧博物馆:科技与文化的完美融合》 一、智慧博物馆的兴起与发展 随着科技的飞速发展,智慧博物馆应运而生。进入新时代,大数据、人工智能、信息化的进步以及智能产品的应用,改变了人们接收信息和学习的习惯。为顺应社会变革&am…

【超详细】UDP协议

UDP传输层协议的一种,UDP(User Datagram Protocol 用户数据报协议): 传输层协议无连接不可靠传输面向数据报 UDP协议端格式 定长报头,8字节源端口号和目的端口号来定位16位UDP长度, 表示整个数据报(UDP首部UDP数据)的最大长度如果校验和出错…

【C++】线程库常用接口

1.创建线程,等待线程,获取线程id 2.全局变量,局部变量,互斥锁 要让不同的线程访问同一个变量和同一把锁,有两种方法: 2.1方法一 定义全局的变量和全局的锁,这样自然就能访问到。 但全局变量在…

电能表预付费系统-标准传输规范(STS)(5)

5.5MeterFunctionObjects / companion specifications配套规格 With reference to Figure 1 it can be seen that the TokenCarrierToMeterInterface, which also includes the TokenCarrier, is dealt with in the IEC 62055-4x and IEC 62055-5x series. The remaining Mete…

论文 | OpenICL: An Open-Source Framework for In-context Learning

主要内容: 2. 提供多种 ICL 方法: 3. 完整的教程: 4. 评估和验证: 背景: 随着大型语言模型 (LLM) 的发展,上下文学习 (ICL) 作为一种新的评估范式越来越受到关注。问题: ICL 的实现复杂&#xf…

[ABC367C] Enumerate Sequences

1.注意输入的是哪个数组&#xff0c;输出的是哪个 2.dfs函数可以带两个参数&#xff0c;方便记录&#xff0c;一个记录第几个位置&#xff0c;一个记录题目的要求&#xff0c;例如求和。 3.注意递归出口输出后一定要return. #include<bits/stdc.h> using namespace std; …