Oracle 中分組排序取值的問題

2021-09-24 12:45:17 字數 1570 閱讀 6158

建表語句:

create table exam

(  name    varchar2(32),

subject varchar2(32),

score   integer

)資料:

insert into exam values ('趙柳', '數學', '71');

insert into exam values ('張三', '數學', '81');

insert into exam values ('李四', '數學', '75');

insert into exam values ('起點', '數學', '88');

insert into exam values ('起點', '英語', '98');

insert into exam values ('李四', '英語', '86');

insert into exam values ('趙柳', '英語', '86');

insert into exam values ('張思', '英語', '33');

insert into exam values ('李四', '語文', '75');

insert into exam values ('張三', '語文', '81');

insert into exam values ('趙柳', '語文', '71');

insert into exam values ('起點', '語文', '88');

1.row_number() over() 的用法:select *,row_number() over(partition by '分組' order by '排序') rn from table;

select t.name,t.subject,t.score, row_number() over (partition by t.subject order by t.score desc) rn from exam t ;

2:rank() over()跳躍排序

對於row_number() over() 來說,如果兩個值相等,區分不出前後,如下圖所示:

rank() over()是跳躍排序的,是可以有兩個第二名的,後面跟著第三名;

如果想 兩個第二名之後跟著是第三名:select t.name,t.subject,t.score, dense_rank() over (partition by t.subject order by t.score desc) rn from exam t ;

oracle中分組排序統計

有3個函式可以實現 rank over dense over row number over 其中 over partition by order by 可以實現分組排序,給其設定別名 例如 num 後,加入條件 where num 1 可以實現只顯示每組排名第一的結果 rank 等函式用作記名次,...

Oracle 先分組後根據每組排序取值

oracle pl sql 先分組後 根據每組排序 獲取每組最大值或最小值 示例 使用者每次登陸都會向表中插入乙個登入日期,現在需要獲取最近10分鐘內登入的使用者,及其最新的登陸時間。因此現需要根據使用者進行分組,然後得到每組中日期最大的那條資料。表結構如下 user id login time 1...

oracle中分組排序並取最大值

最近工作中需要聯合查詢幾個表中的資料,並且需要分組查詢並取得每個組中的最大值,使用到了乙個之前沒有用過的oracle函式,分組排序函式。分組排序函式可以滿足以下需求 1 要求取出按field1分組後,並在每組中按照field2排序 2 亦或更加要求取出1中已經分組排序好的前多少行的資料 分組排序函式...