595
人物
內建函數-下__SQL_大數據計算服務-阿裏雲
MaxCompute SQL中可以使用窗口函數進行靈活的分析處理工作,窗口函數隻能出現在select子句中,窗口函數中不要嵌套使用窗口函數和聚合函數,窗口函數不可以和同級別的聚合函數一起使用。目前在一個MaxCompute SQL語句中,可以使用至多5個窗口函數。
窗口函數的語法
window_func() over (partition by col1, [col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]] windowing_clause)
- partition by部分用來指定開窗的列。分區列的值相同的行被視為在同一個窗口內。現階段,同一窗口內最多包含1億行數據,否則運行時報錯。
- order by用來指定數據在一個窗口內如何排序
- windowing_clause部分可以用rows指定開窗方式,有兩種方式: rows between x preceding|following and y preceding|following表示窗口範圍是從前或後x行到前或後y行。 rows x preceding|following窗口範圍是從前或後第x行到當前行。** x,y必須為大於等於0的整數常量,限定範圍0 ~ 10000,值為0時表示當前行。必須指定order by才可以用rows方式指定窗口範圍。
備注:
- 並非所有的窗口函數都可以用rows指定開窗方式,支持這種用法的窗口函數有avg、count、max、min、stddev和sum。
COUNT
函數聲明:
bigint count([distinct] expr) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
用途:計算計數值。
參數說明:
- expr:任意類型,當值為NULL時,該行不參與計算。當指定distinct關鍵字時表示取唯一值的計數值。
- partition by col1[, col2…]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內expr的計數值,指定order by時返回結果以指定的順序排序,並且值為當前窗口內從開始行到當前行的累計計數值。
返回值:Bigint類型。
備注:
- 當指定distinct關鍵字時不能寫order by。
示例:假設存在表test_src,表中存在bigint類型的列user_id,
select user_id,
count(user_id) over (partition by user_id) as count
from test_src;
+---------+------------+
| user_id | count |
+---------+------------+
| 1 | 3 |
| 1 | 3 |
| 1 | 3 |
| 2 | 1 |
| 3 | 1 |
+---------+------------+
-- 不指定order by時,返回當前窗口內user_id的計數值
select user_id,
count(user_id) over (partition by user_id order by user_id) as count
from test_src;
+---------+------------+
| user_id | count |
+---------+------------+
| 1 | 1 | -- 窗口起始
| 1 | 2 | -- 到當前行共計兩條記錄,返回2
| 1 | 3 |
| 2 | 1 |
| 3 | 1 |
+---------+------------+
-- 指定order by時,返回當前窗口內從開始行到當前行的累計計數值。
AVG
函數聲明:
avg([distinct] expr) over(partition by col1[, col2…]
[order by col1 [asc|desc] [, col2[asc|desc]…]] [windowing_clause])
用途:計算平均值。
參數說明:
- distinct:當指定distinct關鍵字時表示取唯一值的平均值。
- expr:Double類型,若輸入為string,bigint會隱式轉換到double類型後參與運算,其它類型拋異常。當值為NULL時,該行不參與計算。Boolean類型不允許參與計算。
- partition by col1[, col2]…:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:不指定order by時返回當前窗口內所有值的平均值,指定order by時返回結果以指定的方式排序,並且返回窗口內從開始行到當前行的累計平均值。
返回值:Double類型。
備注:
- 指明distinct關鍵字時不能寫order by。
MAX
函數聲明:
max([distinct] expr) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
用途:計算最大值。
參數說明:
- expr:除Boolean以外的任意類型,當值為NULL時,該行不參與計算。當指定distinct關鍵字時表示取唯一值的最大值(指定該參數與否對結果沒有影響)。
- partition by col1[, col2…]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的最大值。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的最大值。
返回值:同expr類型。
備注:
- 當指定distinct關鍵字時不能寫order by。
MIN
函數聲明:
min([distinct] expr) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
用途:計算最小值。
參數說明:
- expr:除boolean以外的任意類型,當值為NULL時,該行不參與計算。當指定distinct關鍵字時表示取唯一值的最小值(指定該參數與否對結果沒有影響)。
- partition by col1[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的最小值。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的最小值。
返回值:同expr類型。
備注:
- 當指定distinct關鍵字時不能寫order by。
MEDIAN
函數聲明:
double median(double number1,number2...) over(partition by col1[, col2…])
decimal median(decimal number1,number2...) over(partition by col1[,col2…])
用途:計算中位數。
參數說明:
number1,number1…:Double類型或decimal類型的1到255個數字。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為null時忽略。如果傳入的參數是一個Double類型的數,會默認轉成一個double 的array。
partition by col1[, col2…]:指定開窗口的列。
返回值:Double類型。
STDDEV
函數聲明:
double stddev([distinct] expr) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
decimal stddev([distinct] expr) over(partition by col1[,col2…] [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
用途:總體標準差。
參數說明:
expr:Double類型或decimal類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略該行。當指定distinct關鍵字時表示計算唯一值的總體標準差。
partition by col1[, col2..]:指定開窗口的列。
order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的總體標準差。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的總體標準差。
返回值:輸入為Decimal類型時返回Decimal類型,否則返回Double類型。
示例:
select window, seq, stddev_pop('1 1') over (partition by window order by seq) from dual;
備注:
- 當指定distinct關鍵字時不能寫order by。
- stddev還有一個別名函數stddev_pop,用法跟stddev一樣。
STDDEV_SAMP
函數聲明:
double stddev_samp([distinct] expr) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
用途:樣本標準差。
參數說明:
- expr:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略該行。當指定distinct關鍵字時表示計算唯一值的樣本標準差。
- partition by col1[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的樣本標準差。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的樣本標準差。
返回值:Double類型。
備注:
- 當指定distinct關鍵字時不能寫order by。
SUM
函數聲明:
sum([distinct] expr) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
用途:計算匯總值。
參數說明:
- expr:Double類型或Bigint類型,當輸入為string時隱式轉換為double參與運算,其它類型報異常。當值為NULL時,該行不參與計算。指定distinct關鍵字時表示計算唯一值的匯總值。
- partition by col1[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內expr的匯總值。指定order by時,返回結果以指定的方式排序,並且返回當前窗口從首行至當前行的累計匯總值。返回值:輸入參數是bigint返回bigint, 輸入參數為double或string時,返回double類型。
返回值:輸入參數是bigint返回bigint,輸入參數為double或string時,返回double類型。
備注:
- 當指定distinct時不能用order by。
DENSE_RANK
命令格式:
bigint dense_rank() over(partition by col1[, col2…]
order by col1 [asc|desc][, col2[asc|desc]…])
用途:計算連續排名。col2相同的行數據獲得的排名相同。
參數說明:
- partition by col1[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:指定排名依據的值。
返回值:Bigint類型。
RANK
命令格式:
bigint rank() over(partition by col1[, col2…]
order by col1 [asc|desc][, col2[asc|desc]…])
用途:計算排名。col2相同的行數據獲得排名順序下降。
參數說明:
- partition by col2[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:指定排名依據的值。
返回值:Bigint類型。
LAG
函數聲明:
lag(expr,bigint offset, default) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]])
用途:按偏移量取當前行之前第幾行的值,如當前行號為rn,則取行號為rn-offset的值。
參數說明:
- expr:任意類型。
- offset:Bigint類型常量,輸入為string,double到bigint的隱式轉換,offset > 0。
- default:當offset指定的範圍越界時的缺省值,常量,默認值為NULL。
- partition by col1[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:指定返回結果的排序方式。
返回值:同expr類型。
LEAD
函數聲明:
lead(expr, bigint offset, default) over(partition by col1[, col2…]
[order by col1 [asc|desc][, col2[asc|desc]…]])
用途:按偏移量取當前行之後第幾行的值,如當前行號為rn則取行號為rn+offset的值。
參數說明:
expr:任意類型。
offset:可選,Bigint類型常量,輸入為string,decimal,double到bigint的隱式轉換,offset > 0。
default:可選,當offset指定的範圍越界時的缺省值,常量。
partition by col1[, col2..]:指定開窗口的列。
order by col1 [asc|desc], col2[asc|desc]:指定返回結果的排序方式。
返回值:同expr類型。
示例:
select c_double_a,c_string_b,c_int_a,lead(c_int_a,1) over(partition by c_double_a order by c_string_b) from dual;
select c_string_a,c_time_b,c_double_a,lead(c_double_a,1) over(partition by c_string_a order by c_time_b) from dual;
select c_string_in_fact_num,c_string_a,c_int_a,lead(c_int_a) over(partition by c_string_in_fact_num order by c_string_a) from dual;
PERCENT_RANK
函數聲明:
percent_rank() over(partition by col1[, col2…]
order by col1 [asc|desc][, col2[asc|desc]…])
用途:計算一組數據中某行的相對排名。
參數說明:
- partition by col1[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:指定排名依據的值。
返回值:Double類型,值域為[0, 1],相對排名的計算方式為為:(rank-1)/(number of rows -1)。
備注:
- 目前限製單個窗口內的行數不超過10,000,000條。
ROW_NUMBER
函數聲明:
row_number() over(partition by col1[, col2…]
order by col1 [asc|desc][, col2[asc|desc]…])
用途:計算行號,從1開始。
參數說明:
- partition by col1[, col2..]:指定開窗口的列。
- order by col1 [asc|desc], col2[asc|desc]:指定結果返回時的排序的值。
返回值:Bigint類型。
CLUSTER_SAMPLE
函數聲明:
boolean cluster_sample(bigint x[, bigint y])
over(partition by col1[, col2..])
用途:分組抽樣。
參數說明:
- x:Bigint類型常量,x>=1。若指定參數y,x表示將一個窗口分為x份;否則,x表示在一個窗口中抽取x行記錄(即有x行返回值為true)。x為NULL時,返回值為NULL。
- y:Bigint類型常量,y>=1,y<=x。表示從一個窗口分的x份中抽取y份記錄(即y份記錄返回值為true)。y為NULL時,返回值為NULL。
- partition by col1[, col2]:指定開窗口的列。
返回值:Boolean類型。
示例,如表test_tbl中有key,value兩列,key為分組字段,值有groupa,groupb兩組,value為值,如下
+------------+--------------------+
| key | value |
+------------+--------------------+
| groupa | -1.34764165478145 |
| groupa | 0.740212609046718 |
| groupa | 0.167537127858695 |
| groupa | 0.630314566185241 |
| groupa | 0.0112401388646925 |
| groupa | 0.199165745875297 |
| groupa | -0.320543343353587 |
| groupa | -0.273930924365012 |
| groupa | 0.386177958942063 |
| groupa | -1.09209976687047 |
| groupb | -1.10847690938643 |
| groupb | -0.725703978381499 |
| groupb | 1.05064697475759 |
| groupb | 0.135751224393789 |
| groupb | 2.13313102040396 |
| groupb | -1.11828960785008 |
| groupb | -0.849235511508911 |
| groupb | 1.27913806620453 |
| groupb | -0.330817716670401 |
| groupb | -0.300156896191195 |
| groupb | 2.4704244205196 |
| groupb | -1.28051882084434 |
+------------+--------------------+
想要從每組中抽取約10%的值,可以用以下MaxCompute SQL完成:
select key, value
from (
select key, value, cluster_sample(10, 1) over(partition by key) as flag
from tbl
) sub
where flag = true;
+--------+--------------------+
| key | value |
+--------+--------------------+
| groupa | -1.34764165478145 |
| groupb | -0.725703978381499 |
| groupb | 2.4704244205196 |
+-----+-----------------------+
聚合函數
聚合函數,其輸入與輸出是多對一的關係,即將多條輸入記錄聚合成一條輸出值。可以與SQL中的group by語句聯用。
COUNT
函數聲明:
bigint count([distinct|all] value)
用途:計算記錄數。
參數說明:
- distinct|all:指明在計數時是否去除重複記錄,默認是all,即計算全部記錄,如果指定distinct,則可以隻計算唯一值數量。
- value:可以為任意類型,當value值為NULL時,該行不參與計算,value可以為,當count()時,返回所有行數。
返回值:Bigint類型。
示例:
-- 如表tbla有列col1類型為bigint
+------+
| COL1 |
+------+
| 1 |
+------+
| 2 |
+------+
| NULL |
+------+
select count(*) from tbla; -- 值為3,
select count(col1) from tbla; -- 值為2
聚合函數可以和group by一同使用,例如:假設存在表test_src,存在如下兩列:key string類型,value double類型,
-- test_src的數據為
+-----+-------+
| key | value |
+-----+-------+
| a | 2.0 |
+-----+-------+
| a | 4.0 |
+-----+-------+
| b | 1.0 |
+-----+-------+
| b | 3.0 |
+-----+-------+
-- 此時執行如下語句,結果為:
select key, count(value) as count from test_src group by key;
+-----+-------+
| key | count |
+-----+-------+
| a | 2 |
+-----+-------+
| b | 2 |
+-----+-------+
-- 聚合函數將對相同key值得value值做聚合計算。下麵介紹的其他聚合函數使用方法均與此例相同,不一一舉例。
AVG
函數聲明:
double avg(double value)
用途:計算平均值。
參數說明:
- value:Double類型,若輸入為string或bigint會隱式轉換到double類型後參與運算,其它類型拋異常。當value值為NULL時,該行不參與計算。Boolean類型不允許參與計算。
返回值:Double類型。
示例:
-- 如表tbla有一列value,類型為bigint
+-------+
| value |
+-------+
| 1 |
| 2 |
| NULL |
+-------+
-- 則對該列計算avg結果為(1+2)/2=1.5
select avg(value) as avg from tbla;
+------+
| avg |
+------+
| 1.5 |
+------+
MAX
函數聲明:
max(value)
用途:計算最大值。
參數說明:
- value:可以為任意類型,當列中的值為NULL時,該行不參與計算。Boolean類型不允許參與運算。
返回值:與value類型相同。
示例:
-- 如表tbla有一列col1,類型為bigint
+------+
| col1 |
+------+
| 1 |
+------+
| 2 |
+------+
| NULL |
+------+
select max(value) from tbla; -- 返回值為2
MIN
命令格式:
MIN(value)
用途:計算最小值。
參數說明:
- value:可以為任意類型,當列中的值為NULL時,該行不參與計算。Boolean類型不允許參與計算。
示例:
-- 如表tbla有一列value,類型為bigint
+------+
| value|
+------+
| 1 |
+------+
| 2 |
+------+
| NULL |
+------+
select min(value) from tbla; -- 返回值為1
MEDIAN
函數聲明:
double median(double number)
用途:計算中位數。
參數說明:
- number:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略。
返回值:Double類型。
STDDEV
函數聲明:
double stddev(double number)
用途:計算總體標準差。
參數說明:
- number:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略。
返回值:Double類型。
STDDEV_SAMP
命令格式:
double stddev_samp(double number)
用途:計算樣本標準差。
參數說明:
- number:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略。
返回值:Double類型。
SUM
函數聲明:
sum(value)
用途:計算匯總值。
參數說明:
- value:Double或bigint類型,若輸入為string會隱式轉換到double類型後參與運算,當列中的值為NULL時,該行不參與計算。Boolean類型不允許參與計算。
返回值:輸入為bigint時返回bigint,輸入為double或string時返回double類型。
示例:
-- 如表tbla有一列value,類型為bigint
+------+
| value|
+------+
| 1 |
+------+
| 2 |
+------+
| NULL |
+------+
select sum(value) from tbla; -- 返回值為3
WM_CONCAT
函數聲明:
string wm_concat(string separator, string str)
用途:用指定的spearator做分隔符,鏈接str中的值。
參數說明:
- separator:String類型常量,分隔符。其他類型或非常量將引發異常。
- str:String類型,若輸入為bigint,double或者datetime類型會隱式轉換為string後參與運算,其它類型報異常。
返回值:String類型。
備注:
- 對語句”select wm_concat(‘,’, name) from test_src;”,若test_src為空集合,這MaxCompute SQL條語句返回NULL值。聚合函數,其輸入與輸出是多對一的關係,即將多條輸入記錄聚合成一條輸出值。可以與SQL中的group by語句聯用。
其他函數
CAST
函數聲明:
cast(expr as <type>)
用途:將表達式的結果轉換成目標類型,如cast(‘1’ as bigint)將字符串”1”轉為整數類型的1,如果轉換不成功或不支持的類型轉換會引發異常。
備注:
- cast(double as bigint),將double值轉換成bigint。
- cast(string as bigint) 在將字符串轉為bigint時,如果字符串中是以整型表達的數字,會直接轉為bigint類型。如果字符串中是以浮點數或指數形式表達的數字,則會先轉為double類型,再轉為bigint類型。
- cast(string as datetime) 或 cast(datetime as string)時,會采用默認的日期格式yyyy-mm-dd hh:mi:ss。
COALESCE
函數聲明:
coalesce(expr1, expr2, ...)
用途:返回列表中第一個非NULL的值,如果列表中所有的值都是NULL則返回NULL。
參數說明:
- expri是要測試的值。所有這些值類型必須相同或為NULL,否則會引發異常。
返回值:返回值類型和參數類型相同。
備注:
- 參數至少要有一個,否則引發異常。
DECODE
函數聲明:
decode(expression, search, result[, search, result]...[, default])
用途:實現if-then-else分支選擇的功能。
參數說明:
- expression:要比較的表達式。
- search:和expression進行比較的搜索項。
- result:search和expression的值匹配時的返回值。
- default:可選項,如果所有的搜索項都不匹配,則返回此default值,如果未指定,則會返回NULL。
返回值:返回匹配的search;如果沒有匹配,返回default;如果沒有指定default,返回NULL。
備注:
- 至少要指定三個參數。
- 所有的result類型必須一致,或為NULL。不一致的數據類型會引發異常。所有的search和expression類型必須一致,否則報異常。
- 如果decode中的search選項有重複時且匹配時,會返回第一個值。
示例:
select
decode(customer_id,
1, 'Taobao',
2, 'Alipay',
3, 'Aliyun',
NULL, 'N/A',
'Others') as result
from sale_detail;
上麵的decode函數實現了下麵if-then-else語句中的功能:
if customer_id = 1 then
result := 'Taobao';
elsif customer_id = 2 then
result := 'Alipay';
elsif customer_id = 3 then
result := 'Aliyun';
...
else
result := 'Others';
end if;
但需要用戶注意的是,通常情況下MaxCompute SQL在計算NULL = NULL時返回NULL,但在decode函數中,NULL與NULL的值是相等的。在上述事例中,當customer_id的值為NULL時,decode函數返回”N/A”。
GREATEST
函數聲明:
greatest(var1, var2, …)
用途:返回輸入參數中最大的一個。
參數說明:
- var1,var2可以為bigint,double,datetime或者string。若所有值都為NULL則返回NULL。
返回值:
- 輸入參數中的最大值,當不存在隱式轉換時返回同輸入參數類型。
- NULL為最小值。
- 當輸入參數類型不同時,double,bigint,string之間的比較轉為double;string,datetime的比較轉為datetime。不允許其它的隱式轉換。
ORDINAL
函數聲明:
ordinal(bigint nth, var1, var2, …)
用途:將輸入變量按從小到大排序後,返回nth指定的位置的值。
參數說明:
- nth:Bigint類型,指定要返回的位置,為NULL時返回NULL。
- var1,var2:類型可以為bigint,double,datetime或者string。
返回值:
- 排在第nth位的值,當不存在隱式轉換時返回同輸入參數類型。
- 有類型轉換時,double,bigint,string之間的轉換返回double。string,datetime之間的轉換返回datetime。不允許其它的隱式轉換。
- NULL為最小。
示例:
ordinal(3, 1, 3, 2, 5, 2, 4, 6) = 2
LEAST
函數聲明:
least(var1, var2, …)
用途:返回輸入參數中最小的一個。
參數說明:
- var1,var2可以為bigint,double,datetime或者string。若所有值都為NULL則返回NULL。
返回值:
- 輸入參數中的最小值,當不存在隱式轉換時返回同輸入參數類型。
- NULL為最小。
- 有類型轉換時,double,bigint,string之間的轉換返回double。string,datetime之間的轉換返回datetime。不允許其它的隱式類型轉換。
UUID
命令格式:
string uuid()
用途:返回一個隨機ID,形式示例:”29347a88-1e57-41ae-bb68-a9edbdd94212”。
SAMPLE
函數聲明:
boolean sample(x, y, column_name)
用途:對所有讀入的column_name的值,sample根據x,y的設置做采樣,並過濾掉不滿足采樣條件的行。
參數說明:
- x,y:Bigint類型,表示哈希為x份,取第y份。y可省略,省略時取第一份,如果省略參數中的y,則必須同時省略column_name。x,y為整型常量,大於0,其它類型或小於等於0時拋異常,若y>x也拋異常。x,y任一輸入為NULL時返回NULL。
- column_name是采樣的目標列。column_name可以省略,省略時根據x,y的值隨機采樣。任意類型,列的值可以為NULL。不做隱式類型轉換。如果column_name為常量NULL會報異常。
返回值:Boolean類型。
備注:
- 為了避免NULL值帶來的數據傾斜,因此對於column_name中為NULL的值,會在x份中進行均勻哈希。如果不加column_name,則數據量比較少時輸出不一定均勻,在這種情況下建議加上column_name,以獲得比較好的輸出結果。
示例:假定存在表tbla,表內有列名為cola的列,
select * from tbla where sample (4, 1 , cola) = true;
-- 表示數值會根據cola hash為4份,取第1份
select * from tbla where sample (4, 2) = true;
-- 表示數值會對每行數據做隨機哈希分配為4份,取第2份
CASE WHEN表達式
MaxCompute提供兩種case when語法格式,如下所述:
case value
when (_condition1) then result1
when (_condition2) then result2
...
else resultn
end
case
when (_condition1) then result1
when (_condition2) then result2
when (_condition3) then result3
...
else resultn
end
case when表達式可以根據表達式value的計算結果靈活返回不同的值, 如以下語句根據shop_name的不同情況得出所屬區域
select
case
when shop_name is null then 'default_region'
when shop_name like 'hang%' then 'zj_region'
end as region
from sale_detail;
說明:
- 如果result類型隻有bigint,double,統一轉double再返回;
- 如果result類型中有string類型,統一轉string再返回,如果不能轉則報錯(如boolean型);
- 除此之外不允許其它類型之間的轉換;
IF
函數聲明:
if(testCondition, valueTrue, valueFalseOrNull)
用途:判斷testCondition是否為真,如果為真,返回valueTrue,如果不滿足則返回另一個值(valueFalse或者Null)。
參數說明:
- testCondition:要判斷的表達式, boolean類型;
- valueTrue: 表達式testCondition為True的時候,返回的值。
- valueFalseOrNull:不滿足表達式testCondition時2,返回的值,可以設為Null.返回值:返回值類型和參數valueTrue或者valueFalseOrNul的類型一致。示例:
select if(1=2,100,200) from dual;
返回值:
+------------+
| _c0 |
+------------+
| 200 |
+------------+
最後更新:2016-11-23 17:16:09
上一篇:
內建函數-上__SQL_大數據計算服務-阿裏雲
下一篇:
Java UDF__UDF_SQL_大數據計算服務-阿裏雲
不予支持 Docker Compose 的標簽__服務編排文檔_用戶指南_容器服務-阿裏雲
彈性Web托管如何解析域名__產品相關問題_使用問題_彈性 Web 托管-阿裏雲
數據鏈路服務__係統架構_產品簡介_雲數據庫 RDS 版-阿裏雲
產品和業務限製__產品簡介_郵件推送-阿裏雲
Ali-Tomcat 安裝__開發工具準備_開發者指南_企業級分布式應用服務 EDAS-阿裏雲
GetRow__API 概覽_API 參考_表格存儲-阿裏雲
獲取解析記錄信息__解析管理接口_API文檔_雲解析-阿裏雲
業務風控Android/iOS使用說明__使用手冊_數據風控-阿裏雲
如何查看代金券?___代金券_代金券及推薦碼_財務-阿裏雲
雲服務器 ECS 功能
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲