對應的語法是這樣的
select row_number() over(partition by col1 order by col2) seq
具體的場景如下:
如果一張表中儲存了整個年級的各個班級每個同學的語文成績
create table score
class varchar2(10),
student varchar2(20),
score int
insert into score values('一班','張三',94);
insert into score values('一班','李四',84);
insert into score values('一班','王五',96);
insert into score values('二班','mary',76);
insert into score values('二班','blue',84);
insert into score values('二班','lanceer',62);
那麼我們如果想要這樣的效果
序號 班級 學生 分數
1 一班 王五 96
2 一班 張三 94
3 一班 李四 84
1 二班 blue 84
2 二班 mary 76
3 二班 lanceer 62
那麼就是需要用到了組內排序產生序號的功能
select
row_number() over(partition by class order by score desc) seq,
class,student score
from score
如果我們想獲取每個班級的第一名的學生的成績,只要在外層再套一層seq的過濾,過濾seq=1的記錄即可
select *
from
select
row_number() over(partition by class order by score desc) seq,
class,student score
from score
)where seq = 1
Oracle 先分組後根據每組排序取值
oracle pl sql 先分組後 根據每組排序 獲取每組最大值或最小值 示例 使用者每次登陸都會向表中插入乙個登入日期,現在需要獲取最近10分鐘內登入的使用者,及其最新的登陸時間。因此現需要根據使用者進行分組,然後得到每組中日期最大的那條資料。表結構如下 user id login time 1...
oracle分組排序
在做統計是很多情況會用到分組排序 結合談論的方法 自己建了乙個demo驗證 留在這裡以便備份 create table student2 student id number primary key,student name varchar2 30 not null create table scor...
根據字串分組
今天要做乙個根據字串分組,然後集體執行乙個操作,想了一上午,動態建立陣列什麼的,最後還是用了list。list alllist new arraylist string m1 a123 x1 string m2 a124 x1 string m3 a125 x2 string m4 a126 x2 ...