SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总

下表记录了夺冠球队的名称及年份:

请写出一条 SQL 语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少?

查询结果:

网上有这道题的出处及答案。详情请阅读原文跳转。

网上的参考答案是用PL/SQL求解的,这里我们用SQL Server看该如何求解。

具体代码如下:

CREATE TABLE #t(TEAM varchar(20), Y int)

INSERT #t(TEAM,Y) VALUES

('活塞',1990),

('公牛',1991),

('公牛',1992),

('公牛',1993),

('火箭',1994),

('火箭',1995),

('公牛',1996),

('公牛',1997),

('公牛',1998),

('马刺',1999),

('湖人',2000),

('湖人',2001),

('湖人',2002),

('马刺',2003),

('活塞',2004),

('马刺',2005),

('热火',2006),

('马刺',2007),

('凯尔特人',2008),

('湖人',2009),

('湖人',2010);

SELECT RN=IDENTITY(INT),* INTO #a FROM #t ORDER BY TEAM,Y

SELECT a.TEAM,

MIN(a.Y) B,

MAX(a.Y) E

FROM #a a

WHERE EXISTS(

SELECT 1 FROM #a

WHERE TEAM=a.TEAM

AND (Y=a.Y-1 OR a.Y=Y-1)

)

GROUP BY a.TEAM,Y-RN

DROP TABLE #t,#a

解答的结果如下:

我们对上面的解法进行解读一下:

首先是给这些数据添加一列自增长的RN列并插入到新的临时表#a并且对TEAM和Y排序。

其次是将#a进行自匹配,匹配的条件是TEAM名称相同(TEAM=a.TEAM),并且年份Y与前后的年份进行匹配(Y=a.Y-1 OR a.Y=Y-1)。

这个匹配是精妙地方之一,这样就可以判定该球队前后几年的年份是否连续的。

如果球队名相同的前提下,年份连续,就满足这个条件;

如果年份连续,但是球队名不相同,就不满足这个条件了。

最后在进行分组的时候,不仅对球队TEAM进行了分组,而且还对Y-RN进行了分组。为什么要对Y-RN进行分组呢?

如果去掉这个条件,我们发现如下情形:

公牛和湖人中间间隔了几年才重新连续夺冠,但是这里因为没有对Y-RN进行分组,导致这个球队和夺冠年份在进行匹配时都满足了。因为#a表中的内容实际上是这样的,

Y=a.Y-1 OR a.Y=Y-1只要有一个满足即可判断是连续的年份,实际上经过我们处理后确实满足上述条件,所以需要加上Y-RN进行第二次分组来判断中间是否有间隔的年份。

这是一道很有意思的题目,小伙伴不妨自己动手尝试一下,兴许下次面试就考这样的题哦~

java nba2009,关于一个NBA球队连续夺冠的SQL查询问题,解法很精妙~相关推荐

  1. Java 中如何使用 SQL 查询文本

    [摘要]         使用 SQL 查询语言,你只能查询位于数据库里面的数据,但是当你面对的数据是一些 Excel 表格或者 Txt 文本格式时,有什么办法能直接对着文件进行 Select 查询呢 ...

  2. java 查询sql_Java 中如何使用 SQL 查询文本

    [摘要] 使用 SQL 查询语言,你只能查询位于数据库里面的数据,但是当你面对的数据是一些 Excel 表格或者 Txt 文本格式时,有什么办法能直接对着文件进行 Select 查询呢?去乾学院看个究 ...

  3. 一个能够编写、运行SQL查询并可视化结果的Web应用:SqlPad

    SqlPad 是一个能够用于编写.运行SQL查询并可视化结果的Web应用.支持 PostgreSQL.MySQL 和 SQL Server.SqlPad 目前仅适合单个团队在内网中使用,它直接通过网络 ...

  4. oracle NBA连续夺冠的题目

    最近看了这么一道题,然后发现有的小伙伴的答案有问题,这里仅附上我个人的写法供大家参考,这也是我第一次写,有不好或者不对的地方欢迎大家指出,先谢过大家啦. 原题目如下: 表nba记录了nba(team  ...

  5. 用Hive统计某个年阶段连接夺冠的NBA球队

    用Hive统计某个年阶段连接夺冠的NBA球队 1.原始数据如下:`在这里插入 team,year 活塞,1990 公⽜,1991 公⽜,1992 公⽜,1993 ⽕箭,1994 ⽕箭,1995 公⽜, ...

  6. SSM毕设项目基于的NBA球队管理系统8x21a(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目基于的NBA球队管理系统8x21a(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuil ...

  7. Java编写 输入一个字符串,请编写一个函数统计连续相同字符及其数量。例如,输入“aabbbbcccAB”,返回“a2b4c3 A1 B1”及5;

    题目描述 输入一个字符串,请编写一个函数统计连续相同字符及其数量.例如,输入"aabbbbcccAB",返回"a2b4c3 A1 B1"及5:又如,输入&quo ...

  8. 计算机java项目(毕设课设) 之 含文档+PPT+任务书+中期检查表+源码等]基于ssm的NBA球队管理系统

    基于ssm的NBA球队管理系统包含管理员和球迷角色,功能分别如下: 管理员:管理员信息管理.修改密码.球队管理.球员管理.球员数据管理.球迷管理: 球迷:注册.登录系统:个人信息:球队管理查看:球员查 ...

  9. python篮球弹跳训练方法_弹跳训练的正确方法,90%人都不知道|NBA球队弹跳训练解密...

    原标题:弹跳训练的正确方法,90%人都不知道|NBA球队弹跳训练解密 篮球比赛中,抢篮板球是最重要的基本功之一,除去意识.卡位.配合等因素外,球员的弹跳是基础中的基础,因此必须加强弹跳力的训练. 这里 ...

最新文章

  1. 高斯混合模型图像聚类、图像生成、可视化分析实战
  2. Python下tornado实现webSocket实现
  3. LeetCode 69 X的平方根
  4. O - Can you find it?
  5. 记录小新pro13 Intel版(S540-13IML)安装hackintosh的一些要点
  6. (已解决)Latex如何插入超链接
  7. android system.img userdata.img文件解包打包及设置
  8. java基于ssm的个人信息保险箱系统
  9. [设备驱动] 最简单的内核设备驱动--字符驱动
  10. 又一家美业SaaS+系统宣布停止服务,美业人你怎么看?
  11. 什么是iu组装服务器,IU李知恩和“买家秀”在“教科书”级别的私有服务器共享是邻居...
  12. 【uniapp小程序】制作一个名片列表
  13. project Structure中的Artifacts是什么
  14. @EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig:缓存核心注解,用来实现缓存功能...
  15. 输出自己的姓名python_【Python编程:显示自己的的姓名和学号,并将学号各位数字相加求和,并显示.】...
  16. fm算法详解_Python实现FM算法解析
  17. CAD中如何给文本自动编号呢?
  18. 经典设计模式实战演练
  19. Python课程内容回顾
  20. android 手机,连接蓝牙耳机连接不成功;两种方式都连接失败

热门文章

  1. 产品经理的必备软件推荐
  2. 无尽之海:从手机到万物
  3. 移动端保存照片到手机相册
  4. Mybatis使用介绍
  5. 阿里平均每天纳税超1.4亿 全年纳税516亿
  6. 网络语言嗨C,1,2,3,4,5,6,7,8,9,0的网络语言代表什么意思啊?
  7. 靶场通关-XSS挑战之旅(1-5)
  8. 计算机视觉 工具 代码合集
  9. 用ASK模型剖析马谡失街亭的必然性
  10. 商务文书范例——邀请函、请柬