TOP N 查詢 SQL
【1】
總結一下:
1. TOP N 的三種語義。
M1: 某種順序下前N條記錄,重複的也算做一條 top 3 1(10) 2(10) 3(10)
M2: 把所有排序列等於第N條的記錄都計算進去,結果可能多餘N條記錄1(10) 1(10) 3(20) 3(20),但N之前的重複記錄要重複計算。這個例子中TOP 3 和 TOP 4結果一樣。
M3: 所有值相等的記錄只算作前N個順序中的一個位置,如 TOP 3 1(10) 1(10) 2(11) 2(11) 2(11) 3(20)
2. ORACLE,DB2,SQL SERVER 的新版本中都增加了OLAP函式 rank() dense_rank() row_number()
rank 名次(值) 1(10) 1(10) 3(20) 重複值的序號一樣,但要空出位置M2
dense_rank 1(10) 1(10) 2(20) 重複的只佔一個序號位置 M3
row_number() 1(10) 2(10) 3(20) 一條記錄對應一個序號 M1
詳細解釋可以參考http://www.blogjava.net/pengpenglin/archive/2008/06/26/210839.html 例子容易理解
3. 另外
SQL SERVER 中 TOP N [ WITH TIES ] 參考【1】
DB2 中 FETCH FIRST N ROWS ONLY
ORACLE 中 rownum(查詢結果出來時自然序號) rowid
ORACLE中rownum與row_number()區別:(參考別人)
row_number()和ROWNUM是看起來相似但概念完全不同的東西,
row_number()是一個分析函式(Analytic Function),它返回的是基於over()引數的行號。
rownum是oracle特別提供的一個偽列,它只作用於查詢的結果集,根據結果集輸出的先後次序給每個紀錄順次編號。
這樣答案
select a.* from(select row_number() over(order by order_col) r,* from stb )a where a.r20;
如果不排序,用rownum top n fetch first 加上except應該也可以。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/38085/viewspace-1013225/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在MySQL中,如何實現Top N及M至N段的記錄查詢?MySql
- SQL 如何查詢連續上漲 N 次的記錄SQL
- SQL查詢的:子查詢和多表查詢SQL
- 【SQL查詢】集合查詢之INTERSECTSQL
- Laravel 5 關聯查詢 —— N 對 N 簡單例子Laravel單例
- 原生SQL查詢SQL
- SQL 聚合查詢SQL
- sql 查詢效率SQL
- sql子查詢SQL
- jQuery查詢第n個li元素jQuery
- [not] in/exists 與 帶TOP的子查詢
- SQL連線查詢SQL
- SQL高階查詢SQL
- sql常用查詢命令SQL
- SQL查詢總結SQL
- SQL 複雜查詢SQL
- sql: 查詢約束SQL
- SQL複雜查詢SQL
- SQL--子查詢SQL
- (1)SQL 基本查詢SQL
- 提高sql查詢速度SQL
- 查詢oracle效能SQLOracleSQL
- SQL Server 查詢分解SQLServer
- SQL Cookbook—查詢、排序SQL排序
- Native SQL查詢SQL
- 查詢索引 常用SQL索引SQL
- oracle常用SQL查詢OracleSQL
- SQL查詢日曆SQL
- 查詢bad sqlSQL
- 常用SQL查詢1SQL
- 提高SQL查詢效能SQL
- SQL查詢優化SQL優化
- SQL查詢效能分析SQL
- sql日期模糊查詢SQL
- 獲取top N cpu pid的sql資訊指令碼SQL指令碼
- Oracle-ORA-00923: 未找到要求的FROM關鍵字-Oracle不支援TOP N查詢Oracle
- Teradata 之top n與sample n
- “超越” SQL 的資料查詢語言“新秀”Top8:GraphQL、PRQL、WebAssembly上榜SQLWeb