ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

关于一个NBA球队连续夺冠的SQL查询问题

2019-10-21 18:00:27  阅读:748  来源: 互联网

标签:SQL team 夺冠 公牛 year NBA 湖人 nba select


今天看到一个挺有意思的题目:

实例1:表结构:

create table nba(
team   varchar2(20),
year number(4)
)

SQL> select * from nba; --表数据

TEAM                  YEAR

-------------------- -----

活塞                  1990

公牛                  1991

公牛                  1992

公牛                  1993

火箭                  1994

火箭                  1995

公牛                  1996

公牛                  1997

公牛                  1998

马刺                  1999

湖人                  2000

湖人                  2001

湖人                  2002

马刺                  2003

活塞                  2004

马刺                  2005

热火                  2006

马刺                  2007

凯尔特人              2008

湖人                  2009

湖人                  2010

21 rows selected

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

---------------
公牛 1991 1993
火箭 1994 1995
公牛 1996 1998
湖人 2000 2002
湖人 2009 2010

---------------

首先这是原文的解法:

select team, min(t2y), max(t1y)
  from (select t2.team, t2.year as t2y, t1.year as t1y
          from nba t1, nba t2
         where t1.team = t2.team
           and t1.year = (t2.year + 1)) t
 group by t.team, (t.t1y - rownum);

代码采用了自关联,数据量小的时候还好,一旦数据上万,自关联就会执行很慢,甚至卡死。

用分析函数可以很方便的求解,代码如下:

select team,min(year) yearq,max(year)+1 yearz from (
select t.*,t.year-rownum cc from (
select nba.team, nba.year, lead(nba.team) over(order by year) aa from nba) t
where t.team = t.aa) t1
group by team,cc 

 

标签:SQL,team,夺冠,公牛,year,NBA,湖人,nba,select
来源: https://www.cnblogs.com/zhoufei2514/p/11715027.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有