閱讀197 返回首頁    go 技術社區[雲棲]


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);

當前測試表數據如下,
table

簡單排序

  首先實現一個簡單的需求,即對所有的分數從高到底進行排序,並顯示每行數據的行號。

可使用如下SQL語句進行查詢:

select NAME, COURSE, SCORE, ROW_NUMBER() OVER (ORDER BY SCORE DESC) SORTNO 
        from  sorttest;

返回結果如下,
image

從上麵的返回結果看到,查詢的結果集裏包含數據的行號。

呃,這個簡單的SQL確實能夠實現排序時獲取排序號的需求,不過這麼排序好像意義並不是很明顯。

分區排序

  分區即分組的意思,分區排序支持按照分組字段為單位生成相對隔離的排序號。來看下麵的例子。
  同樣是這張表,另外一個需求可能要顯得有意義一些。我們把每個同學的成績按照分數進行單獨排序,並且按照分數從高到低進行編號。

這裏我們使用分區排序的語法來實現,如下,

select NAME, COURSE, SCORE, ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY SCORE DESC) SORTNO 
        from  sorttest;

獲取的結果集如下,
image

  從結果集中我們看到,排序號是按照每個同學為單位進行單獨編號的,這個看似苛刻需求在這裏隻是通過一個簡單的SQL語句就實現了。

  對於排序編號這點上,DB2支持的還是比較強大的,SQL語法使用也很方便,“小特性,大用處”,不可小視。

最後更新:2017-10-15 23:33:13

  上一篇:go  阿裏雲邀請碼,推薦碼如何領取
  下一篇:go  一條簡單的SQL的加鎖實現分析