rank 對錶中的資料進行分級排序

2021-08-23 13:33:47 字數 2366 閱讀 2188

譬如有張學生成績統計單的表student_result

name number kemu fenshu

li 0113101 高數 90

zhang 0113098 高數 80

wang 0113077 高數 70

li 0113101 物理 80

zhang 0113098 物理 90

wang 0113077 物理 70

我如果要檢索出表中高數的前兩名和物理的前兩名

那麼可以通過使用 rank()方法達到目的

--首先 通過kemu進行分類,然後按照fenshu降序排序

select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_result t

結果

rk name number kemu fenshu

1 li 0113101 高數 90

2 zhang 0113098 高數 80

3 wang 0113077 高數 70

1 zhang 0113098 物理 90

2 li 0113101 物理 80

3 wang 0113077 物理 70

--然後,檢索出rk<=2的記錄,即取出前兩名

select * from (select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_result t) as y where y.rk<=2;

結果

rk name number kemu fenshu

1 li 0113101 高數 90

2 zhang 0113098 高數 80

1 zhang 0113098 物理 90

2 li 0113101 物理 80

dense_rank()和 rank()的用法完全相同,不同的是在出現分數相同的情況下

如name number kemu fenshu

li 0113101 高數 80

zhang 0113098 高數 80

wang 0113077 高數 70

li 0113101 物理 80

zhang 0113098 物理 90

wang 0113077 物理 70

select rank() over(order by fenshu desc) rk,t.* from student_result t

的結果為

rk name number kemu fenshu

1 zhang 0113098 物理 90

2 li 0113101 高數 80

2 zhang 0113098 高數 80

2 li 0113101 物理 80

5 wang 0113077 高數 70

5 wang 0113077 物理 70

而select dense_rank() over(order by fenshu desc) rk,t.* from student_result t

結果為

rk name number kemu fenshu

1 zhang 0113098 物理 90

2 li 0113101 高數 80

2 zhang 0113098 高數 80

2 li 0113101 物理 80

3 wang 0113077 高數 70

3 wang 0113077 物理 70

附 row_number()的使用

select row_number() over(order by fenshu desc) rk,t.* from student_result t

rk name number kemu fenshu

1 zhang 0113098 物理 90

2 li 0113101 高數 80

3 zhang 0113098 高數 80

4 li 0113101 物理 80

5 wang 0113077 高數 70

6 wang 0113077 物理 70

fetch n rows only

取出當前記錄的前多少行

如

select row_number() over(order by user_no) from user_files fetch first 5 rows only;

MYSQL 對錶中資料進行插入,更新,刪除

插入資料 1.為表的所有字段插入資料 1 不指定具體欄位名 insert into 表名 values 值1,值2,值n 每個值對應表中字段,值的型別要和字段資料型別相符 eg insert into employee values 001,huan,xian 2 列出表中所有字段,進行資料插入。可...

MySQL資料庫中對錶中的資料進行增刪改

dml 對錶中的資料進行增刪改 對某個表增加一行資料 insert into stu name,age,score values wang 19,90.8 除了數字型別以外,其他的型別都需要用單引號或雙引號引用起來。mysql insert into stu name,age,score value...

MySQL INSERT對錶中資料的操作 插入資料

1 insert values語句 insert values 的語法格式為 2 insert set語句 語法格式為 由 insert 語句的兩種形式可以看出 在student資料庫中建立乙個學生表,包含學生編號 id 學生姓名 name 學生年齡age輸入的 sql 語句和執行結果如下所示。my...