ITPub博客

首页 > 数据库 > Oracle > 自关联和动态group by

自关联和动态group by

原创 Oracle 作者:wenhual43 时间:2014-04-10 21:05:32 0 删除 编辑
网上看到一个开发面试题,我也拿来研究了一下。
表nba记录了nba(team  VARCHAR2(10),y NUMBER(4))夺冠球队的名称及年份
TEAM                 Y
-------------------- ------------------------------
活塞                 1990
公牛                 1991
公牛                 1992
公牛                 1993
火箭                 1994
火箭                 1995
公牛                 1996
公牛                 1997
公牛                 1998
请写出一条SQL语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少,结果如下: 
TEAM               B          E
------------------------------ --------------------------------
公牛                1991       1993
火箭                1994       1995
公牛                 1996       1998
写法如下:
select t.team, min(t.ay) as bg , max(t.ay)+1 as ed
  from (select b.team, a.y  as ay 
          from nba a, nba b
         where a.team = b.team
           and a.y = b.y - 1
           order by a.y) t        
 group by t.team,(t.ay-rownum)
分析:
1. 在t表里,把有连续夺冠的球队查询出来,包括球队,和年份,能取到开始,但是结束需要加1。
2.分组,排好序后,根据 (年份-rownum),因为是按年排序,又减去一个rownum,所以team一样的,年份减去rownum后,
年份-rownum也会一样。看样子,以后想分组不一样值的字段,减去某个变量,类似rownum,实现减去后的值一样,达到分组效果。

这个sql还是很巧妙的,拓展我的思维了。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25027760/viewspace-1139759/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 一道概率题
请登录后发表评论 登录
全部评论

注册时间:2011-08-03

  • 博文量
    32
  • 访问量
    130412