zoukankan      html  css  js  c++  java
  • 关于一个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 
    自强不息,厚德载物
  • 相关阅读:
    hdu 4339 Query 一道挺好的树状数组题(树状数组+二分思想)
    hdu 1133 Buy the Ticket(递推+精度精算)
    hdu 1267 下沙的沙子有几粒?(二维递推题)
    hdu 3397 Sequence operation(线段树的延迟标记)
    hdu 1258(dfs)
    hdu 3911 Black And White(线段树的延迟标记法)
    hdu 4148 Length of S(n) (坑爹的规律题)
    hdu 1016(一道经典的dfs)
    如何建立一棵哈夫曼树并且输出压缩码
    Codeforces Round #588 (Div. 2) E. Kamil and Making a Stream(DFS)
  • 原文地址:https://www.cnblogs.com/zhoufei2514/p/11715027.html
Copyright © 2011-2022 走看看