sql over的作用及用法

2021-06-19 07:44:19 字數 1251 閱讀 5797

sql over的作用及用法

rank ( ) over ( [query_partition_clause] order_by_clause )

dense_rank ( ) over ( [query_partition_clause] order_by_clause )

可實現按指定的字段分組排序,對於相同分組欄位的結果集進行排序,

其中partition by 為分組字段,order by 指定排序字段

over不能單獨使用,要和分析函式:rank(),dense_rank(),row_number()等一起使用。

其引數:over(partition by columnname1 order by columnname2)

含義:按columname1指定的字段進行分組排序,或者說按欄位columnname1的值進行分組排序。

例如:employees表中,有兩個部門的記錄:department_id =10和20

select department_id,rank() over(partition by department_id order by salary) from employees就是指在部門10中進行薪水的排名,在部門20中進行薪水排名。如果是partition by org_id,則是在整個公司內進行排名。

以下是個人見解:

sql中的over函式和row_numbert()函式配合使用,可生成行號。可對某一列的值進行排序,對於相同值的資料行進行分組排序。如下表:

執行語句:select row_number() over(order by aid desc) as rowid,* from bb後的結果如下:

rowid標識行號有了,同時aid也按降序排列。aid有重複的記錄,如果要刪除rowid為2所對應的記錄則可以:

with [a] as

(select row_number() over(order by aid desc) as rowid,* from bb)

delete from [a] where rowid=2

如果檢視rowid 為5所對應的記錄的資訊,可以:

with [b] as

(select row_number() over(order by aid desc) as rowid,* from bb)

select * from [b] where rowid=5

注意:over裡的order只能查查找里的原始資料進行操作,不會對計算出的新值或新字段起作用。

msdn中的說法如下:

sql over的作用及用法

rank over query partition clause order by clause dense rank over query partition clause order by clause 可實現按指定的字段分組排序,對於相同分組欄位的結果集進行排序,其中 partition by...

sql over的作用及用法

rank over query partition clause order by clause dense rank over query partition clause order by clause 可實現按指定的字段分組排序,對於相同分組欄位的結果集進行排序,其中partition by ...

sql over的作用及用法

rank over query partition clause order by clause dense rank over query partition clause order by clause 可實現按指定的字段分組排序,對於相同分組欄位的結果集進行排序,其中partition by ...