天天看點

oracle 完成排序,去重和分頁(limit,group by)

1.oracle的去重可以使用distinct關鍵字,例如有張表如下所示:

表 A

oracle 完成排序,去重和分頁(limit,group by)

隻select單列,可以用distinct對該字段去除: select distinct name from A,結果如下:

oracle 完成排序,去重和分頁(limit,group by)

如果select多列,用distinct去重的sql為:select distinct name, id from A,結果如下:

oracle 完成排序,去重和分頁(limit,group by)

 實際上是根據name和id兩個字段來去重的,這種方式Access和SQL Server同時支援。

如果我select多個字段:name,id但是隻想對id去除,怎麼實作呢?

select id, distinct name from A;這樣的語句文法是會報錯的。

正确的姿勢應該使用group by進行去重,例如:select id,max(name) as name from A group by id

max可以換成其他的聚合函數,比如min,如果id和name是一一對應的,那麼使用什麼聚合函數無所謂,如果其他字段和group by的字段是一對多,比如其他字段orderTime(一個使用者id對應多個訂單時間),那麼顯示最近時間的訂單就要用max(orderTime)。當然,group by後面一般會跟上 order by orderTime desc,意思是按照訂單時間倒序。

2.既然前面提到排序,那麼一般與分頁是分不開的,oracle實作分頁查詢,相比mysql中的limit等關鍵字,oracle中對應的是ROWNUM來實作的。

如果我想查詢A表中的第5-10條記錄,那麼語句為:SELECT * FROM (SELECT ID,NAME,ROWNUM r FROM A WHERE ROWNUM <= 10) WHERE r > 5;, 需要注意的是ROWNUM是不能直接用>,否則查不出結果。