db2 某個字段排序 DB2 分組排序

2021-10-13 13:25:46 字數 2218 閱讀 6923

from:

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

譬如有張學生成績統計單的表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;

DB2的字段型別

db2的字段型別如下 字段型別 描述字段長度及其預設值 char size 用於儲存定長 size 位元組的字串資料。每行定長 不足部分補為空格 最大長度為254位元組,預設值為每行1位元組。varchar size 用於儲存變長的字串資料。其中最大位元組長度由 size 指定。每行長度可變,最大長...

DB2 修改表字段

alter table table name add column name column type 2.更改字段型別 alter table table name alter column column name set data type column type 注意 更改字段型別是有限制的,如...

db2的大字段CLOB,BLOB,DBCLOB

db2有三種型別的大字段 clob character large objects 適用於存放單位元組的字串,當我們要儲存的字元長度超過varchar的最大長度 32k 時,我們就要考慮使用clob了。dbclob double byte character large objects dbclob...