197
技術社區[雲棲]
DB2查詢獲取排序號
相信大家都會有這樣的需求,即對一張表進行排序查詢的同時獲取排序號。那麼在使用mysql數據庫時,我們通常通過變量來實現,或者客戶端代碼裏進行fetch循環 +1操作。
而在DB2數據庫裏,直接提供了獲取行號的SQL語法,一條簡單的SQL語句就能實現這個需求。
接下來的測試用例如下:
create table sorttest(name varchar(20),course varchar(20),score int);
insert into sorttest values('張三','語文',80);
insert into sorttest values('張三','數學',70);
insert into sorttest values('張三','英語',90);
insert into sorttest values('李四','語文',67);
insert into sorttest values('李四','數學',75);
insert into sorttest values('李四','英語',85);
簡單排序
首先實現一個簡單的需求,即對所有的分數從高到底進行排序,並顯示每行數據的行號。
可使用如下SQL語句進行查詢:
select NAME, COURSE, SCORE, ROW_NUMBER() OVER (ORDER BY SCORE DESC) SORTNO
from sorttest;
從上麵的返回結果看到,查詢的結果集裏包含數據的行號。
呃,這個簡單的SQL確實能夠實現排序時獲取排序號的需求,不過這麼排序好像意義並不是很明顯。
分區排序
分區即分組的意思,分區排序支持按照分組字段為單位生成相對隔離的排序號。來看下麵的例子。
同樣是這張表,另外一個需求可能要顯得有意義一些。我們把每個同學的成績按照分數進行單獨排序,並且按照分數從高到低進行編號。
這裏我們使用分區排序的語法來實現,如下,
select NAME, COURSE, SCORE, ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY SCORE DESC) SORTNO
from sorttest;
從結果集中我們看到,排序號是按照每個同學為單位進行單獨編號的,這個看似苛刻需求在這裏隻是通過一個簡單的SQL語句就實現了。
對於排序編號這點上,DB2支持的還是比較強大的,SQL語法使用也很方便,“小特性,大用處”,不可小視。
最後更新:2017-10-15 23:33:13