【问题标题】:Pl/SQL procedure to rank highest GPA to lowest without Rank FunctionPl/SQL 程序将最高 GPA 排名到最低,没有排名功能
【发布时间】:2018-04-27 19:17:22
【问题描述】:

Pl/SQL procedure to rank highest GPA to lowest

我指的是上面的问题。是否可以在没有排名功能的情况下对学生及其 GPA 进行排名?

FETCH c1 INTO queryResult; 
 INSERT INTO GPA VALUES (queryResult.snum, queryResult.sname, rank,queryResult.OrderFrequency);
 rank := rank + 1;
 EXIT WHEN k = rank;
 END LOOP;
 CLOSE c1;
 COMMIT;
END;

【问题讨论】:

    标签: sql plsql cursor oracle10g


    【解决方案1】:

    是否可以在没有排名的情况下对学生及其 GPA 进行排名 功能?

    是的,使用带有左自连接、分组依据和计数的普通 SQL。
    但预计会比使用RANK函数的版本慢

    现场演示:http://sqlfiddle.com/#!4/bde51/7

    SELECT s1. snum,
           s1.sname,
           s1.gpa,
           count( s2.gpa ) + 1 as rank
    FROM students s1
    LEFT JOIN students s2
    ON s1.GPA < s2.GPA
    GROUP BY s1. snum,
             s1.sname,
             s1.gpa
    ORDER BY 4;
    
    | SNUM |     SNAME | GPA | RANK |
    |------|-----------|-----|------|
    |    6 | Student 6 |   4 |    1 |
    |    4 | Student 4 |   3 |    2 |
    |    3 | Student 3 |   2 |    3 |
    |    1 | Student 1 |   2 |    3 |
    |    2 | Student 2 |   1 |    5 |
    |    5 | Student 5 |   1 |    5 |
    

    select snum,
           sname, 
           GPA, 
           RANK() OVER (ORDER BY GPA desc) as srank
    from students
    ORDER BY 4
    
    | SNUM |     SNAME | GPA | SRANK |
    |------|-----------|-----|-------|
    |    6 | Student 6 |   4 |     1 |
    |    4 | Student 4 |   3 |     2 |
    |    1 | Student 1 |   2 |     3 |
    |    3 | Student 3 |   2 |     3 |
    |    5 | Student 5 |   1 |     5 |
    |    2 | Student 2 |   1 |     5 |
    

    【讨论】:

    • 您好,如果您不介意我问,我将如何使用该 select 语句创建过程和游标?
    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多