1. 程式人生 > >Oracle 分組排序函式

Oracle 分組排序函式

專案開發中,我們有時會碰到需要分組排序來解決問題的情況:
1、要求取出按field1分組後,並在每組中按照field2排序;
2、亦或更加要求取出1中已經分組排序好的前多少行的資料

這裡通過一張表的示例和SQL語句闡述下oracle資料庫中用於分組排序函式的用法。
1.row_number() over()
row_number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序,而此函式計算的值就表示每組內部排序後的順序編號(組內連續的唯一的)。
與rownum的區別在於:使用rownum進行排序的時候是先對結果集加入偽劣rownum然後再進行排序,而此函式在包含排序從句後是先排序再計算行號碼。row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開始排序)。

2.rank() over()
rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內)

3.dense_rank() over()
dense_rank()也是連續排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重複值的。

相關推薦

Oracle 分組排序函式

專案開發中,我們有時會碰到需要分組排序來解決問題的情況: 1、要求取出按field1分組後,並在每組中按照field2排序; 2、亦或更加要求取出1中已經分組排序好的前多少行的資料 這裡通過一張表的示例和SQL語句闡述下oracle資料庫中用於分組排序函式

Oracle——高階排序函式 & 高階分組函式

高階排序函式 [ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx) 1.row_number() 連續且遞增的數字 1 2 3 4    row_number() over (pa

mysql或者oracle分組排序取前幾條數據

esc rom group over nbsp oracle oracl 排序 _id mysql: select a.* from(select t1.*,(select count(*)+1 from 表 where 分組字段=t1.分組字段 and 排序字段<t

mssql sqlserver 分組排序函式row_number、rank、dense_rank用法簡介及說明

轉載:http://www.maomao365.com/?p=5771 摘要: 在實際的專案開發中,我們經常使用分組函式,對組內資料進行群組後,然後進行組內排序: 如: 1:取出一個客戶一段時間內,最大訂單數的行記錄 2: 取出一個客戶一段時間內,最後一次銷售記錄的行記錄

Oracle排序函式

下面介紹Oracle的三種排序函式: 1,ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2) 2,RANK() OVER(PARTITION BY col1 ORDER BY col2) 3,DENSE_RANK() O

ORACLE:分組統計函式(COUNT()、SUM()、AVG()、MAX()、MIN())的使用

知識點: 統計函式: COUNT()、SUM()、MIN()、MAX()、AVG() 這些統計函式是允許和其它函式巢狀的 例:統計出企業員工的平均僱傭年限 以上的幾個操作函式,在表中沒有資料的時候,只要COUNT()函式會返回結果,其它都是Null

oracle 分組排序取出最大和最小的記錄

表中欄位:phonenumber,score,examtime 要取出時間段中phonenumber的score最大並且examtime最小的記錄,用max和min取的值都不是正確的記錄值,用排序子查詢的方法可以取到 select phonenumber,score,examtim

oracle分組排序+建表無效字元+按固定順序排序

一、oracle分組後排序,取每組第一條資料 根據COL1欄位分組,然後每組按COL2排序取最大的那一條 SELECT *           FROM (SELECT ROW_NUMBER()

oracle的dense_rank函式,實現分組後組內排序,取最值一組資料

1.按VESSEL_CD, SYEAR, SMonth進行分組,組內資料按SENDDATE排序。 select VESSEL_CD, SYEAR, SMonth, to_char(SENDDATE, 'yyyy-mm-dd hh24

ROW_NUMBER() OVER()函式用法詳解 (分組排序 例子多)

語法格式:row_number() over(partition by 分組列 order by 排序列 desc) row_number() over()分組排序功能: 在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 wher

oracle 分組函式、檢視

組函式 分組函式作用於一組資料,對每一組返回一個值 組函式型別: 1、計數        count(列名 或 表示式)     對滿足的行數進行統計 2、求和 &nbs

資料庫中資料的刪選,排序分組函式的使用

Select (關鍵字) from(表)where(列) 查詢固定的條件的 Select *from 學生資訊 where 姓名=’女’ and 家庭住址=‘河南’ Select *from 學生資訊 where 家庭住址like‘河南’ 排序(對於考試編號為101的成績進行排序) Select * f

Oracle-分組函式與group by

常見的分組函式:max(),min(),sum(),avg(),count() 組函式最多隻能巢狀兩層 1、max()和min()函式 對任何型別資料都可以使用,顯示最大值和最小值 select max(sal) 最大工資,min(sal) 最小工資 from emp; 最

分組函式group by和Oracle中分析函式partition by的用法以及區別

       今天有個同事給我打電話問我題目列出的這個問題,在日常開發中,確實它們倆都是與分組有關的,但是需要注意的是一個是分組函式另一個是分析函式,講解用到的表就以Oracle中schema的scott的EMP表和DEPT表為例做講解:        老總下命令說:需要統

oracle利用分析函式row_number()over()查詢一張表所有欄位並按照其中部分欄位分組查詢某欄位最大值

先準備資料: deptid :部門id. parent_deptid :deptid 的父級部門,也就是depid 是他的子部門。 create table test_employee (empid int ,deptid int ,parent_deptid int,sa

oracle 使用instr()函式對in查詢出的記錄按照in中的資料進行排序

需求:輸入漢字,得出它的拼音碼、五筆碼; 方法:使用instr()函式 select * from cnword where word in ('我','們','是','祖','國','的','花',

Oracle 藉助DECODE函式,自定義順序排序

由於業務需求想根據自定義的ids排序 貼出部分程式碼 基於mybatisorder by decode (t.id, <foreach item="id" index="index" collection="ids" separato

Oracle資料庫rank()over(partition by order by)實現分組 排序 取前幾資料

Oracle1.使用 rank()over(order by)得到記錄排序根據工資排名,排名相同的時候下一個排名累加,比如第三和第四工資一樣,那麼第三第四排名都是3,第五排名是5而非4dense_rank()實現的效果不累加,第五仍是4例:select code 編號,sal

[Oracle SQL] 使用rollup分組統計按統計結果分組排序顯示的問題

今天想對某些班、課程的掛科人數做統計和小計,使用rollup可以很容易實現這個功能。 比如涉及的成績(all_scores)表結構為 BH 班號 BJMC 班級名稱 KCMC 課程名稱 JD 績點 其中JD為0表示掛科了。我們很容易寫一個分組統計來統計各個班各個課程的掛科

Oracle 分組排序 欄位相同的排在一起顯示

SELECT t.*,  RANK() OVER(PARTITION BY t.ukeysn  order by t.ukeyoperid desc) RK                           FROM PMS_UKEYOPER t  where t.tim