【Tips】獲取結果集中偶數行記錄
如果您看過下面這篇文章,一定會對ROW_NUMBER分析函式產生些許感情,其實ROW_NUMBER分析函式還可以給我們帶來更多的樂趣。
《【SQL】獲取指定範圍內結果集的實現方法》
http://space.itpub.net/519536/viewspace-626976
這篇文章我給大家展示一下使用ROW_NUMBER分析函式得到偶數行資料的方法。
1.T表內容
sec@ora10g> select * from t;
ID SAL
---------- ----------
1 1000
2 800
3 600
4 2000
5 3000
6 1500
7 1800
8 2100
9 400
10 600
11 200
12 1900
13 3000
14 4000
14 rows selected.
2.提問
如何得到按照id排序後偶數id的資訊?
3.回答
1)使用ROW_NUMBER分析函式快速完成任務
sec@ora10g> select id, sal
2 from (select id, sal, ROW_NUMBER () over (order by id) as rn
3 from t)
4 where mod(rn,2) = 0
5 /
ID SAL
---------- ----------
2 800
4 2000
6 1500
8 2100
10 600
12 1900
14 4000
7 rows selected.
2)“更簡便的方法”
您可能會問,不用那麼複雜,直接在id欄位上使用mod函式不也同樣可以得到我們想要的結果麼?
sec@ora10g> select id, sal from t where mod(id,2) = 0;
ID SAL
---------- ----------
2 800
4 2000
6 1500
8 2100
10 600
12 1900
14 4000
7 rows selected.
恭喜你,答對啦。完全正確。
不過這種方法只適用與這個需求,換一種需求再試試看。
4.再提問
如何得到按照sal排序後偶數行的資訊?
5.再回答
1)再次使用ROW_NUMBER分析函式快速完成任務
sec@ora10g> select id, sal
2 from (select id, sal, ROW_NUMBER () over (order by sal) as rn
3 from t)
4 where mod(rn,2) = 0
5 /
ID SAL
---------- ----------
9 400
10 600
1 1000
7 1800
4 2000
5 3000
14 4000
7 rows selected.
2)此時如果使用普通查詢方法將不再方便
使用子查詢和rownum構造這個結果,顯然比較複雜。
sec@ora10g> select t1.id, t1.sal
2 from (select ROWNUM rnum, id, sal
3 from (select id, sal
4 from t
5 order by sal)) t1
6 where MOD (t1.rnum, 2) = 0;
ID SAL
---------- ----------
9 400
10 600
1 1000
7 1800
4 2000
5 3000
14 4000
7 rows selected.
6.小結
隨著需求的複雜度加大,使用普通查詢方法的代價越高。慢慢感受分析函式帶給我們的便利吧。
珍愛生命,請遠離繁瑣低效的SQL語句。
Good luck.
secooler
10.02.07
-- The End --
《【SQL】獲取指定範圍內結果集的實現方法》
http://space.itpub.net/519536/viewspace-626976
這篇文章我給大家展示一下使用ROW_NUMBER分析函式得到偶數行資料的方法。
1.T表內容
sec@ora10g> select * from t;
ID SAL
---------- ----------
1 1000
2 800
3 600
4 2000
5 3000
6 1500
7 1800
8 2100
9 400
10 600
11 200
12 1900
13 3000
14 4000
14 rows selected.
2.提問
如何得到按照id排序後偶數id的資訊?
3.回答
1)使用ROW_NUMBER分析函式快速完成任務
sec@ora10g> select id, sal
2 from (select id, sal, ROW_NUMBER () over (order by id) as rn
3 from t)
4 where mod(rn,2) = 0
5 /
ID SAL
---------- ----------
2 800
4 2000
6 1500
8 2100
10 600
12 1900
14 4000
7 rows selected.
2)“更簡便的方法”
您可能會問,不用那麼複雜,直接在id欄位上使用mod函式不也同樣可以得到我們想要的結果麼?
sec@ora10g> select id, sal from t where mod(id,2) = 0;
ID SAL
---------- ----------
2 800
4 2000
6 1500
8 2100
10 600
12 1900
14 4000
7 rows selected.
恭喜你,答對啦。完全正確。
不過這種方法只適用與這個需求,換一種需求再試試看。
4.再提問
如何得到按照sal排序後偶數行的資訊?
5.再回答
1)再次使用ROW_NUMBER分析函式快速完成任務
sec@ora10g> select id, sal
2 from (select id, sal, ROW_NUMBER () over (order by sal) as rn
3 from t)
4 where mod(rn,2) = 0
5 /
ID SAL
---------- ----------
9 400
10 600
1 1000
7 1800
4 2000
5 3000
14 4000
7 rows selected.
2)此時如果使用普通查詢方法將不再方便
使用子查詢和rownum構造這個結果,顯然比較複雜。
sec@ora10g> select t1.id, t1.sal
2 from (select ROWNUM rnum, id, sal
3 from (select id, sal
4 from t
5 order by sal)) t1
6 where MOD (t1.rnum, 2) = 0;
ID SAL
---------- ----------
9 400
10 600
1 1000
7 1800
4 2000
5 3000
14 4000
7 rows selected.
6.小結
隨著需求的複雜度加大,使用普通查詢方法的代價越高。慢慢感受分析函式帶給我們的便利吧。
珍愛生命,請遠離繁瑣低效的SQL語句。
Good luck.
secooler
10.02.07
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-627000/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript獲取奇數行或者偶數行程式碼JavaScript行程
- 獲取任務的執行結果
- python執行shell並獲取結果Python
- 獲取多臺主機命令執行結果
- 【Spark】 Spark作業執行原理--獲取執行結果Spark
- PHP PDO獲取結果集PHP
- 【Oracle】對RID為偶數的記錄進行操作Oracle
- Go 多協程記錄執行結果Go
- exonerate結果整理,獲取target序列
- Java獲取多執行緒執行結果方式的歸納與總結Java執行緒
- TP5 獲取資料集記錄數
- 獲取當前修改的行記錄資料
- 依據oracheck結果修改系統引數配置記錄
- 關於獲取事件相應的結果事件
- 記錄輸出結果工具-script
- php中對MYSQL操作之批量執行,與獲取批量結果PHPMySql
- 通過 gitlab 介面獲取程式碼提交記錄和改動行數Gitlab
- ABL獲取XBL資訊記錄
- JavaScript 奇數行或者偶數行JavaScript
- MySql先分組統計總記錄數,再獲取記錄數中的最大值MySql
- Sql_從查詢的結果集中分組後取最後有效的資料成新的結果集小記(待優化)SQL優化
- 多執行緒的補充 獲取一定時間的執行結果執行緒
- Laravel 分組獲取最新記錄Laravel
- springboot:使用非同步註解@Async獲取執行結果的坑Spring Boot非同步
- 如何獲取繫結變數變數
- Laravel Excel 如何獲取 Excel 檔案的公式結果LaravelExcel公式
- mysql ,tidb sysbench 測試結果記錄MySqlTiDB
- Docker+Jenkins+Pipline如何獲取git外掛環境變數(提交sha、分支等)以及Jenkinsfile中獲取sh執行結果(獲取git最近提交資訊)DockerJenkinsGit變數
- easyexcel多sheet多執行緒匯入示例,獲取所以執行緒執行結果後返回Excel執行緒
- Python純程式碼 取組合數結果Python
- Shell指令碼中獲取SELECT結果值的方法指令碼
- ORACLE 獲取繫結變數值Oracle變數
- 如何獲取繫結變數值變數
- MONGODB 最近測試結果的簡單記錄MongoDB
- 一些 Rust Tips 記錄Rust
- MX記錄獲取元件(vb實現) (轉)元件
- 【SQL】獲取指定範圍內結果集的實現方法SQL
- SQL Server 怎麼在分頁獲取資料的同時獲取到總記錄數SQLServer