关于一个NBA球队连续夺冠的SQL查询问题 |
您所在的位置:网站首页 › 湖人冠军年份和人员 › 关于一个NBA球队连续夺冠的SQL查询问题 |
今天看到一个挺有意思的题目:
实例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
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |