天天看點

阿裡雲大資料ACP認證知識點梳理6——基礎SQL語句(内建函數、視窗函數規則、隐式轉換規則)

abs(null)=null
abs(-1)=1
abs(-1.2)=1.2
abs("-2")=2.0
abs(122320837456298376592387456923748)=1.2232083745629837e32           

注:當number為Double、Bigint或Decimal類型時。輸入為Bigint,傳回Bigint。輸入為Double,傳回Double類型。輸入為Decimal,傳回Decimal類型。若輸入為String類型,會隐式轉換為Double類型後參與運算,其它類型抛異常。若輸入為null,則傳回null。

ceil(1.1)=2
ceil(-1.1)=-1           

注:向上取整,函數傳回不小于輸入值value的最小整數。Double類型或Decimal類型,若輸入為String類型或Bigint類型,會隐式轉換到Double類型後參與運算,其他類型抛異常。傳回Bigint類型。任意一個參數輸入為null,則傳回null。

floor(1.2)=1
floor(1.9)=1
floor(0.1)=0
floor(-1.2)=-2
floor(-0.1)=-1
floor(0.0)=0
floor(-0.0)=0           

注:向下取整,函數傳回不大于number的最大整數值。Double類型或Decimal類型,若輸入為String類型或Bigint類型,會隐式轉換為Double類型後參與運算,其他類型抛異常。傳回Bigint類型。若number為null,則傳回null。

select rand() from dual;
select rand(1) from dual;           

注:該函數以seed為種子,傳回Double類型的随機數,傳回值區間是的0~1。可選參數,Bigint類型,随機數種子,決定随機數序列的起始值。傳回Double類型。

round(125.315)=125.0
round(125.315, 0)=125.0
round(125.315, 1)=125.3
round(125.315, 2)=125.32
round(125.315, 3)=125.315
round(-125.315, 2)=-125.32
round(123.345, -2)=100.0
round(null)=null
round(123.345, 4)=123.345
round(123.345, -4)=0.0           

注:Double類型或Decimal類型。若輸入為String類型或Bigint類型,會隐式轉換為Double類型後參與運算,其他類型抛異常。四舍五入計算到小數點後的位置,其他類型參數會引發異常。如果省略表示四舍五入到個位數,預設值為0。傳回Double類型或Decimal類型。若number或Decimal_places為null,則傳回null。負數會從小數點向左開始計數,并且不保留小數部分。如果Decimal_places超過了整數部分長度,傳回0。

視窗函數

MaxCompute SQL中可以使用視窗函數進行靈活的分析處理工作,視窗函數隻能出現在select子句中,視窗函數中不要嵌套使用視窗函數和聚合函數,視窗函數不可以和同級别的聚合函數一起使用。

目前在一個MaxCompute SQL語句中,最多可以使用5個視窗函數。

window_func() over (partition by [col1,col2…]
[order by [col1[asc|desc], col2[asc|desc]…]] windowing_clause)
           

注:文法聲明格式。

select deptno, ename, sal, dense_rank() over (partition by deptno order by sal desc) as nums;

注:将所有職工根據部門分組,每個組内根據SAL做降序排序,獲得職工自己組内的序号。

count語句

select user_id,count(user_id) over (partition by user_id) as count
from test_src;           

注:該函數用于計算計數值。