在下 SQL 排序時,有時排序的欄位內容值是 null,這往往會造成一些困擾。
在 Oracle 中,預設的行為是 null 會被當成最大值,也就是在 ASC 時會排在最後,DESC 則在最前面。
關於欄位的 null 值,Oracle 有一些函式如:NVL、DECODE 來將 null 值轉成使用者預設的值,甚至
大笨鳥 發表在 痞客邦 留言(0) 人氣(2,844)
RANK() 這個 function 和之前介紹過的 ROW_NUMBER() 不論是用法或是效果上都是一樣的(請按此連到 ROW_NUMBER() 文章),所以此處就不介紹用法了。不過雖然用法和效果一樣,但是 RANK() 在為欄位做排序的值和 ROW_NUMBER() 就有些不同了。
當遇到相同的欄位值時,ROW_NUMBER() 還是會一路從1、2、3、4…這樣排下去,但是 RANK() 則是會把相同的欄位編成相同排序值,然後下個不同的值則跳號過去,結果就會像1、2、2、4…這樣。舉例來說:
大笨鳥 發表在 痞客邦 留言(0) 人氣(321)
ROW_NUMBER 的簡介與範例ROW_NUMBER,顧名思義可以知道這個 function 可以為查出來的每一筆記錄依序塞入一個順序值(1、2、3、…),感覺上好像跟 oracle 的 ROWNUM 一樣,但是這個 function 厲害的地方在於它可以指定某個欄位來排順序值。舉例來說:公司裏有 A、B 兩個部門,A 部門裏有三個員工,而 B 部門裏有六個員工,若想要分別為 A 部門和 B 部門排順序值,使用 ROWNUM 是做不到的,此時只能使用 ROW_NUMBER。
ROW_NUMBER 的使用格式如下:
ROW_NUMBER() OVER (
大笨鳥 發表在 痞客邦 留言(1) 人氣(21,684)