oracle nullif函式的使用

2021-06-08 00:13:26 字數 2258 閱讀 4735

//題目:

id name     

------------  

1   張  

1   王  

2   趙  

//結果:

id name  

--------  

1   張  

王  2   趙  

//解法一:

with t as(  

select 1 id, '張' name from dual union all  

select 1 id, '王' name from dual union all  

select 1 id, '李' name from dual union all  

select 2 id, '趙' name from dual)  

select nullif(id, pid) id, name  

from (  

select id, name,  

lag(id) over(partition by id order by id) pid  

from t)  

id name  

---------- ----  

1 張  

王  李  

2 趙  

//分析:

//這裡巧妙的利用了lag()分析函式,

//此函式可一次性的返回多行資料,而不需要進行表的自連線

//而且可以將距離第一行記錄幾行的記錄返回,若沒有記錄就返回null

//下面是巢狀檢視的查詢結果:

select id, name,  

lag(id) over(partition by id order by id) pid  

from t  

/  id name        pid  

---------- ---- ----------  

1 張     

1 王            1  

1 李            1  

2 趙    

//我們再來看外層查詢,即主查詢

//這裡使用到了nullif()函式,本人還是頭一次看到此函式

//這個函式有兩個引數,nullif(x,y),

//它將x和y進行比較,如果x=y,則返回值為null,如果不等,則返回x

for example:  

nullif(12, 12)  would return null  

nullif(12, 13)  would return 12  

// //解法二:

with tt as(  

select 1 id, '張' name from dual union all  

select 1 id, '王' name from dual union all  

select 1 id, '李' name from dual union all  

select 2 id, '趙' name from dual)  

select decode(row_number() over(partition by id order by id),1,id) id,  

name  

from tt  

id name  

1 張  

王  李  

2 趙  

//解析:

//此解法是用到了視窗函式row_number()分析函式,

//此函式是為每乙個分組和排序返回乙個排序值,用法有點像rownum

//我們來看看如果沒用decode函式結果是怎麼樣的:

select row_number() over(partition by id order by id) id,  

name  

from tt  

id name  

---------- ----  

1 張  

2 王  

3 李  

1 趙  

//使用decode函式是為了進行比較的,

//如果row_number函式返回的id值為1,那麼就顯示此id值

//如果row_number函式返回的id值不為1,那麼就顯示null

//所以我們看到了上面的結果:張的id為1,趙的id也為1

原帖:oracle nullif()函式

oracle lag()分析函式:

oracle row_number()分析函式:

函式的用法 Excel函式TREND函式的用法

trend函式是乙個線性趨勢的 函式,在已知y值 x值的條件下,x對應的y值 trend共有4個引數,三個必選引數,乙個可選引數 同樣的一組資料第四引數不同,結果也是有區別的 灰色曲線是由第四引數為false時得到的結果生成的曲線。通過斜率與截距函式我們計算出這兩條曲線的斜率與截距,可以看出,第四引...

main函式的入口函式

作業系統裝載程式之後,首先執行的 並不是main的第一行,而是某些別的 這些 負責準備好main函式執行所需要的環境,並且負責呼叫main函式,執行這些 的函式稱為入口函式或入口點 entry point 視平台的不同而有不同的名字。程式的入口點實際上是乙個程式的初始化和結束部分,它往往是執行庫的一...

返回函式的函式

廖雪峰python課程裡的 作業的兩種實現方法 1.def createcounter a 0 def counter nonlocal a nonlocal 函式是 引用外部函式 的函式 a 1 a 1等同於a a 1 return a return counter countera create...