『壹』 sql server 分組成績前100名的數據
參考
首先,該問題對應的SQL如下
select 采購類別,客戶,訂貨總額
from (select 采購類別,客戶,訂貨總額,
row_number() over(partition by 采購類別 order by 訂貨總額 desc) rn
from table_name) a
where rn<=2
;
其次,常用資料庫比如Oracle和Sqlserver都有特定函數完成分組排序的功能,如果需要顯示並列的情況可以用下面另外的2個.
分別有3個類似函數:
row_number() over
這個函數不需要考慮是否並列,哪怕根據條件查詢出來的數值相同也會進行連續排名。也是最常用的函數,排序結果類似於1,2,3,4,5
rank() over
查出指定條件後進行一個排名,但是有一個特點。假如是對學生排名,那麼實用這個函數,成績相同的兩名是並列。排序結果類似於1,2,2,4,5
dense_rank() over
比較特殊,排序結果類似於1,2,2,3,4
『貳』 oracle資料庫sql怎麼查詢第5到第8條數據
1、創建測試表,
create table test_row(id number , value varchar2(20));
『叄』 sql 語句 並列排名的問題
無論sqlserver 還是 oracle
用
rank() 或者 dens_rank() 函數。
select name,score,rank() over(order by score) tt from t;
如果有並列的話 . 他們後邊的排序會變成這樣的。 根據你的需求選用。
1
2
2
4
select name,score, dens_rank() over(order by score) tt from t;
1
2
2
3
感覺你用地2個,, dense_rank() 然後設置。 讓 虛擬的這個排序列tt<=5
『肆』 sql中有沒有類似於oracle中rownum的函數
Oracle
row_number()函數用法
row_number()over(partition
by
col1
order
by
col2)表示根據col1分組,在分組內部根據col2排序,而此函數計算的值就表示每組內部排序後的順序編號(組內連續的唯一的)。
與rownum的區別在於:使用rownum進行排序的時候是先對結果集加入偽劣rownum然後再進行排序,而此函數在包含排序從句後是先排序再計算行號碼。
row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開始排序)。
rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內)
dense_rank()也是連續排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重復值的。
oracle
分析函數
row_number(),返回一個整數值(>=1);
語法格式:
row_number()
over
(order
by
col_1[,col_2
...])
作用:按照col_1[,col_2
...]排序,返回排序後的結果集。