【问题标题】:Pl/SQL procedure to rank highest GPA to lowestPl/SQL 程序将 GPA 最高到最低
【发布时间】:2015-11-06 23:35:33
【问题描述】:

所以我正在尝试编写一个程序,该程序将使用游标对最高 GPA= 1 进行排名,依此类推。我被困的地方是

declare
 snum students.snum%type;
 sname students.sname%type;
 GPA students.GPA%type;
begin 
 for Rec in 
   (select snum,sname,GPA 
      from students
      order by GPA desc)loop
  dbms_output.put_line(rec);
  end loop;
end;

我被困在循环中(现在它只是一个占位符)。我不确定设置每个 GPA 排名的正确方法。

【问题讨论】:

  • 不要使用光标。使用rank()row_number()

标签: sql plsql


【解决方案1】:

oracle中有RANK功能。 See more here.

例子:

declare
 v_snum students.snum%type;    --Avoid to use "variable name" as same as "column name"
 v_sname students.sname%type;
 v_GPA students.GPA%type;
begin 
 for rec in 
   (select snum,
           sname, 
           GPA, 
           RANK() OVER (ORDER BY GPA desc) as srank
      from students)
 loop
  dbms_output.put_line(rec.snum  || '|' || rec.sname || '|' || rec.GPA || '|' || rec.srank);
 end loop;
end;

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多