建表語句:
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中已經分組排序好的前多少行的資料 分組排序函式...