隨筆-94  評論-56  文章-3  trackbacks-0

          Oracle中聚合函數(shù)RANK和DENSE_RANK的使用.

          期末考試成績表(T_QMKSCJ)
          年度 班級號 科目號 學(xué)生學(xué)號 成績
          2000 001 0001 00001001 88
          2000 001 0001 00001002 99
          2000 001 0001 00001003 89
          2000 001 0002 00001001 87
          2000 001 0002 00001002 60
          2000 001 0002 00001003 70
          2000 002 0001 00002001 88
          2000 002 0001 00002002 99
          2000 002 0001 00002003 89
          2000 002 0002 00002001 87
          2000 002 0002 00002002 60
          2000 002 0002 00002003 70
                                 
          2001 001 0001 01001001 88
          2001 001 0001 01001002 99
          2001 001 0001 01001003 89
          2001 001 0002 01001001 87
          2001 001 0002 01001002 60
          2001 001 0002 01001003 70
          2001 002 0001 01002001 88
          2001 002 0001 01002002 99
          2001 002 0001 01002003 89
          2001 002 0002 01002001 87
          2001 002 0002 01002002 60
          2001 002 0002 01002003 70
          2001 003 0003 01003001 87
          2001 003 0003 01003002 60
          2001 003 0003 01003003 70

          1)選出各年度各班級各科目第一名的學(xué)生的信息(年度,班級號,科目號,成績,學(xué)號)

          select T.年度, T.班級號, T.科目號, T.成績,T.學(xué)生學(xué)號,
                 dense_rank() over (partition by T.年度, T.班級號, T.科目號 order by T.成績 desc) T.排名
          from   T_QMKSCJ T
          where  T.排名 = '1'


          2)選出各年度各班級各科目第一名的學(xué)生的信息(年度,班級名,科目名,成績,學(xué)號,學(xué)生姓名)

          select T.年度, T.班級名, T.科目名, T.成績,T.學(xué)生學(xué)號,T.學(xué)生姓名,
                 dense_rank() over (partition by T.年度, T.班級號, T.科目號 order by T.成績 desc) T.排名
          from  
            (select
                 A.年度, A.班級號, A.科目號, A.成績,A.學(xué)生學(xué)號,B.班級名, C.學(xué)生姓名, D.科目名
             from
                 T_QMKSCJ A,
                 T_班級 B,
                 T_學(xué)生 C,
                 T_科目 D
             where  A.班級號 = B.班級號
               and  A.學(xué)生學(xué)號 = C.學(xué)生學(xué)號
               and  A.科目號 = D.科目號
            ) T
          where T.排名 = '1'


           
          3)某年度某班級的某學(xué)生的某門科目的考試成績在其班級排第幾?

          年度 班級號 科目號 學(xué)生學(xué)號 成績
          2001 002 0001 01002003 89

          SELECT    
                RANK(2001,002,0001,89) WITHIN GROUP    
                (ORDER BY T.年度, T.班級號, T.科目號, T.成績 DESC) T.排名    
          FROM T_QMKSCJ T

          注意:
          Rank()里的參數(shù)必須為常數(shù),或常值表達(dá)式,里面參數(shù)的個數(shù),類型也要和order by后字段的類型相對應(yīng).

          posted on 2007-11-29 12:22 小言身寸 閱讀(773) 評論(1)  編輯  收藏 所屬分類: 數(shù)據(jù)庫/SQL語言

          評論:
          # re: Oracle SQL 中 RANK & DENSE_RANK 的應(yīng)用 2013-07-06 07:37 | 陳怡冉
          主站蜘蛛池模板: 弥渡县| 轮台县| 贵阳市| 肇源县| 广河县| 竹溪县| 新建县| 莆田市| 阳高县| 蒙自县| 洛南县| 吴川市| 紫金县| 红河县| 临澧县| 珠海市| 五大连池市| 固安县| 松原市| 句容市| 隆安县| 康保县| 岐山县| 抚顺市| 资源县| 左贡县| 镇赉县| 修武县| 峨眉山市| 马公市| 新化县| 武山县| 鄂伦春自治旗| 北海市| 大渡口区| 天峨县| 长丰县| 牡丹江市| 常熟市| 乳源| 长顺县|