zoukankan      html  css  js  c++  java
  • ORACLE分科目统计每科前三名的学生的语句

    有个成绩表 score(student_no,Subject_no,Score)分别为学号,课程号,成绩。我想用语句查询出每科的前三名学生的学号,请各位高手教教小弟

    1.创建测试语句:
    create table score(student_no varchar2(3),Subject_no varchar2(20),Score number);
    insert into score values('001','语文',70);
    insert into score values('001','数学',60);
    insert into score values('001','英语',90);

    insert into score values('002','语文',78);
    insert into score values('002','数学',67);
    insert into score values('002','英语',80);

    insert into score values('003','语文',89);
    insert into score values('003','数学',60);
    insert into score values('003','英语',97);

    insert into score values('004','语文',50);
    insert into score values('004','数学',67);
    insert into score values('004','英语',70);

    insert into score values('005','语文',79);
    insert into score values('005','数学',65);
    insert into score values('005','英语',79);

    insert into score values('006','语文',74);
    insert into score values('006','数学',56);
    insert into score values('006','英语',87);
    commit;
    2.产生结果:
    select * from (
    select t.*,row_number() over(partition by t.subject_no order by t.score desc) pm from score t) where pm<4;

    STUDENT_NO SUBJECT_NO SCORE PM
    002 数学 67 1
    004 数学 67 2
    005 数学 65 3
    003 英语 97 1
    001 英语 90 2
    006 英语 87 3
    003 语文 89 1
    005 语文 79 2
    002 语文 78 3

    或者以下SQL:
    select* from score s1 where Score in( select Score from score s2
    where s2.Subject_no=s1.Subject_no and rownum<=3
    )order by s1.Subject_no,s1.Score desc

    转自:http://zhidao.baidu.com/link?url=Y3KzpLugzm4HIIJXMlgOQEU-MZmeo0avJ1ZBcQ66DwWtLUaIIP9X3EsVsGCFqXfpBGUaBfcMDoCV2dOSLX8Bdq
  • 相关阅读:
    YbtOJ:NOIP2020 模拟赛B组 Day10
    洛谷11月月赛Ⅱ-div.2
    P1494 [国家集训队]小Z的袜子
    [模板]莫队/P3901 数列找不同
    P4145 上帝造题的七分钟2 / 花神游历各国
    P4109 [HEOI2015]定价
    P4168 [Violet]蒲公英
    分块
    P3378 【模板】堆(code)
    网络基础——网络层
  • 原文地址:https://www.cnblogs.com/anyhow/p/3641681.html
Copyright © 2011-2022 走看看