首页 > 其他分享 >nba连续获冠问题(自连接,分组,伪列)

nba连续获冠问题(自连接,分组,伪列)

时间:2023-04-13 16:36:30浏览次数:39  
标签:获冠 -- 伪列 t2 t1 year nba team

--请写出一条SQL语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少,结果如下:
TEAM BEGIN END
公牛 1991 1993
火箭 1994 1995
公牛 1996 1998
湖人 2000 2002
湖人 2009 2010


--第一步:nba表自连接,先查询出连续两年获得冠军的队伍及获冠起止时间
select t2.team, t2.year as t2y, t1.year as t1y
          from nba t1, nba t2
         where t1.team = t2.team        --t1,t2队伍相同但获胜时间相隔一年
           and t1.year = (t2.year + 1)      --符合条件的即连续获胜两年的队伍
-------------------------------------------------------------------
--第二步:根据上方所提的查询以队伍名字、同队伍获胜时间的相同点分组,即可得到答案表
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)      --根据队伍名称、和获冠较大的年份减去伪列的差值分组
 order by min(t2y);               --并根据年份排序

select * from nba;
--通过第一步的自连接获得表如下,根据队伍和t1y减去伪列的值分组,即可以把同一队伍连续获冠的年份再次聚合为一条

 

标签:获冠,--,伪列,t2,t1,year,nba,team
From: https://www.cnblogs.com/Argitacos/p/17315290.html

相关文章