presto函數大全 中文版


https://prestodb.github.io/docs/0.215/functions.html

 

6.1. 邏輯操作
6.2. 比較函數和運算符
6.3. 條件表達式
6.4. Lambda 表達式
6.5. 轉換函數
6.6. 數學函數和運算符
6.7. 位運算函數
6.8. 小數函數和運算符
6.9. 字符串函數和運算符
6.10. Regular Expression Functions
6.11. 二進制函數和運算符
6.12. json函數和運算符
6.13. 時間日期函數和運算符
6.14. 聚合函數
6.15. 窗口函數
6.16. array數組函數
6.17. map函數
6.18. url函數
6.19. 地理相關函數
6.20. 基數估算算法函數
6.21. Quantile Digest Functions
6.22. Color Functions
6.23. Session Information
6.24. Teradata Functions

 

6.1 邏輯運算符

邏輯運算符
操作

描述

例子

AND

兩個值都為true,則為true

a AND b

OR

兩個值其中一個為true,則為true

a OR b

NOT

值為false,結果則為true

NOT a

 

 

6.2 比較函數和運算符

 

比較操作

操作

描述

<

小於

>

大於

<=

小於等於

>=

大於等於

=

等於

<>

不等於

!=

不等於

 

范圍比較:between

between適用於值在一個特定的范圍內, 使用方法:value BETWEEN min AND max,

Not between 使用於值不在某個特定范圍內。

null值不能出現在between操作中,如下兩種執行結果都是Null

SELECT NULL BETWEEN 2 AND 4; -- null

SELECT 2 BETWEEN NULL AND 6; -- null

presto中,value, min, and max 三個參數在between 和not between中必須是同一數據類型。’John’ between 2.3 and 35.2 這種就會報錯

 

IS NULL 和IS NOT NULL

用於判斷值是否為空,所有數據類型都可以用於此判斷

 

IS DISTINCT FROM 和IS NOT DISTINCT FROM

特有用法。在presto的sql中,null代表未知值,任何表達式中一旦包含Null,最后結果也會是null,IS DISTINCT FROM和IS NOT DISTINCT FROM可以把null值當成某個已知值,從而使結果返回true或者false(即使表達式中有Null值)。一般不會用到,欲知詳情,參考官方文檔

 

GREATEST 和 LEAST

這兩個函數不是SQL標准函數,他們是常用的擴展。參數中不能有Null值。

greatest(value1, value2, ..., valueN)

返回提供的最大值

least(value1, value2, ..., valueN) → [same as input]

返回提供的最小值

 

批量比較判斷: ALL, ANY 和SOME

ALL, ANY 和SOME可以在以下情況使用

和子查詢進行比較

例如:

SELECT 'hello' = ANY (VALUES 'hello', 'world'); -- true

SELECT 21 < ALL (VALUES 19, 20, 21); -- false

SELECT 42 >= SOME (SELECT 41 UNION ALL SELECT 42 UNION ALL SELECT 43);

-- true

 

6.3. 條件表達式

CASE

標准的SQL CASE 表達式有兩種模式。 “簡單模式”從左向右查找表達式的每個 value , 直到找出相等的 expression:

CASE expression

WHEN value THEN result

[ WHEN ... ]

[ ELSE result ]

END

返回匹配 value 的 result 。 如果沒有匹配到任何值,則返回 ELSE 子句的 result ; 如果沒有 ELSE 子句,則返回空。示例:

SELECT a,

CASE a

WHEN 1 THEN 'one'

WHEN 2 THEN 'two'

ELSE 'many' END

 

“查找模式”從左向右判斷每個 condition 的布爾值, 直到判斷為真,返回匹配 result :

CASE

WHEN condition THEN result

[ WHEN ... ]

[ ELSE result ] END

如果判斷條件都不成立,則返回 ELSE 子句的 result ; 如果沒有 ELSE 子句,則返回空。示例:

SELECT a, b,

CASE

WHEN a = 1 THEN 'aaa'

WHEN b = 2 THEN 'bbb'

ELSE 'ccc' END

 

IF

IF 函數是語言結構,它與下面的 CASE 表達式功能相同:

CASE

WHEN condition THEN true_value

[ ELSE false_value ] END

if(condition, true_value)

如果 condition 為真,返回 true_value ; 否則返回空, true_value 不進行計算。

if(condition, true_value, false_value)

如果 condition 為真,返回 true_value ; 否則計算並返回 false_value 。

 

COALESCE

coalesce(value[, ...])

返回參數列表中的第一個非空 value 。 與 CASE 表達式相似,僅在必要時計算參數。

可類比mysql的nvl功能,經常用於轉空值為0或者’’(空字符)。

 

NULLIF

nullif(value1, value2)

如果 value1 與 value2 相等,返回空;否則返回 value1 。

 

TRY

評估一個表達式,如果出錯,則返回Null。類似於編程語言中的try catch

try函數一般結合COALESCE使用,COALESCE可以將異常的空值轉為0或者’’

以下情況會被try捕獲:

分母為0

錯誤的cast操作或者函數入參

數字超過了定義長度

個人不推薦使用,應該明確以上異常,做數據預處理

 

6.4. Lambda 表達式

不常用,具體參考官方文檔

 

6.5. 轉換函數

cast轉換函數

Presto會將數字和字符值隱式轉換成正確的類型。 Presto不會把字符和數字類型相互轉換。 例如,一個查詢期望得到一個varchar類型的值, Presto不會自動將bigint類型的值轉換為varchar類型。

如果有必要,可以將值顯式轉換為指定類型。

cast(value AS type) → type

顯式轉換一個值的類型。 可以將varchar類型的值轉為數字類型,反過來轉換也可以。try_cast(value AS type) → type

與 cast() 相似,區別是轉換失敗返回null。

 

數據格式

parse_presto_data_size(string) -> decimal(38)

將一個字符串的數據格式轉換為數字,基本數據類型。舉例:

SELECT parse_presto_data_size('1B'); -- 1

SELECT parse_presto_data_size('1kB'); -- 1024

SELECT parse_presto_data_size('1MB'); -- 1048576

SELECT parse_presto_data_size('2.3MB'); -- 2411724

 

數據類型

typeof(expr) → varchar

返回表達式的數據類型。

 

6.6 數學函數和運算符

數學運算符

Operator

Description

+

-

*

/

%

取余

 

數學函數

abs(x) → [same as input]

返回x的絕對值

 

ceil(x) → [same as input]

同ceiling()

ceiling(x) → [same as input]

返回x的向上取整的數值

 

rand() → double

隨機數

 

cbrt(x) → double

degrees(x) → double

e() → double

exp(x) → double

floor(x) → [same as input]

from_base(string, radix) → bigint

ln(x) → double

log2(x) → double

log10(x) → double

log(x, b) → double

mod(n, m) → [same as input]

pi() → double

pow(x, p) → double

radians(x) → double

random() → double

保留小數,四舍五入

round(x) → [same as input]

round(x, d) → [same as input]

sqrt(x) → double

to_base(x, radix) → varchar

以上為不常用的數學函數,具體可參考官方文檔

 

統計學函數

wilson_interval_lower(successes, trials, z) → double

wilson_interval_upper(successes, trials, z) → double

 

三角函數

所有三角函數的參數都是以弧度表示。參考單位轉換函數degrees() 和 radians()。不做詳細介紹。

acos(x) → double

asin(x) → double

atan(x) → double

atan2(y, x) → double

cos(x) → double

cosh(x) → double

sin(x) → double

tan(x) → double

tanh(x) → double

 

浮點函數

infinity() → double

is_finite(x) → boolean

is_infinite(x) → boolean

is_nan(x) → boolean

nan() → double

 

6.7. Bitwise函數

bit_count(x, bits) → bigint

Count the number of bits set in x (treated as bits-bit signed integer) in 2’s complement representation:

SELECT bit_count(9, 64); -- 2

SELECT bit_count(9, 8); -- 2

SELECT bit_count(-7, 64); -- 62

SELECT bit_count(-7, 8); -- 6

 

bitwise_and(x, y) → bigint

Returns the bitwise AND of x and y in 2’s complement representation.

 

bitwise_not(x) → bigint

Returns the bitwise NOT of x in 2’s complement representation.

 

bitwise_or(x, y) → bigint

Returns the bitwise OR of x and y in 2’s complement representation.

 

bitwise_xor(x, y) → bigint

Returns the bitwise XOR of x and y in 2’s complement representation.

See also bitwise_and_agg() and bitwise_or_agg().

 

6.8. Decimal 函數和運算符

 

6.9. 字符串函數和運算符

字符串運算符

|| 表示字符連接

SELECT 'he'||'llo' --hello

 

字符串函數

chr(n) → varchar

返回在下標為n的位置的char字符的字符串格式表示

select chr(100) --d

 

concat(string1, string2) → varchar

字符串連接

 

length(string) → bigint

返回字符串的長度

 

lower(string) → varchar

轉換為小寫

 

ltrim(string) → varchar

去掉字符串開頭的空格

 

replace(string, ‘a’) → varchar

去掉字符串中的a字符

 

replace(string, ‘a’, ‘b’) → varchar

把字符串中所有的a字符 替換 為 b

 

reverse(string) → varchar

字符串倒序

 

rtrim(string) → varchar

去掉字符串尾部的空格

 

split(string, delimiter) → array<varchar>

將字符串按限定符(delimiter)分隔為一個array

 

split(string, delimiter, limit) → array<varchar>

將字符串按限定符(delimiter)分隔為一個array,限定數量。最后一個元素包含了最后一個字符串后面所有的字符。Limit 必須是個數字

 

split_part(string, delimiter, index) → varchar

將字符串按限定符(delimiter)分隔為一個array.取出制定索引的元素。index從1開始,如果Index超過了數組長度,則返回null。

 

strpos(string, substring) → bigint

返回字符串中第一次出現substring的位置。從1開始,如果未找到,返回0。舉例:

select strpos('hello world!','l') --3

select strpos('hello world!','da') --0

 

substr(string, start) → varchar

從start位置 開始 截取字符串

 

substr(string, start, length) → varchar

從start位置 開始 截取字符串,截取的長度為length。

一般用於截取時間戳格式

Select substr(‘2019-03-10 10:00:00’,1,10) --截取到日 2019-03-10

Select substr(‘2019-03-10 10:00:00’,1,7) --截取到月 2019-03

 

trim(string) → varchar

去掉字符串首尾的空格

 

upper(string) → varchar

將字符串轉為大寫

 

6.10. 正則表達式函數

所有的正則表達式函數都使用Java樣式的語法。具體介紹參考官方文檔

regexp_extract_all(string, pattern) -> array(varchar)

regexp_extract_all(string, pattern, group) -> array(varchar)

regexp_extract(string, pattern) → varchar

regexp_extract(string, pattern, group) → varchar

regexp_like(string, pattern) → boolean

regexp_replace(string, pattern) → varchar

regexp_replace(string, pattern, replacement) → varchar

regexp_replace(string, pattern, function) → varchar

regexp_split(string, pattern) -> array(varchar)

 

6.11. 二進制函數和運算符

length(binary) → bigint

返回 binary 的字節長度。

 

to_base64(binary) → varchar

將 binary 編碼為base64字符串表示。

 

from_base64(string) → varbinary

將base64編碼的 string 解碼為二進制數據。

 

to_base64url(binary) → varchar

使用URL安全字符,將 binary 編碼為base64字符串表示。

 

from_base64url(string) → varbinary

使用URL安全字符,將base64編碼的 string 解碼為二進制數據。

 

to_hex(binary) → varchar

將 binary 編碼為16進制字符串表示。

 

from_hex(string) → varbinary

將16進制編碼的 string 解碼為二進制數據。

 

其他具體參考官方文檔

 

6.12. json函數和運算符

Cast to JSON

SELECT CAST(9223372036854775807 AS JSON); -- JSON '9223372036854775807'

 

Cast from JSON

SELECT CAST(JSON '[1,23,456]' AS ARRAY(INTEGER)); -- [1, 23, 456]

以上兩種都很少使用

 

JSON 函數

is_json_scalar(json) → boolean

判斷json是否為純量

 

json_array_contains(json, value) → boolean

判斷json中是否包含某個值 value

 

json_array_get(json_array, index) → json

返回指定索引位置的json元素,索引從0開始。

SELECT json_array_get('["a", [3, 9], "c"]', 0); -- JSON 'a' (invalid JSON)

SELECT json_array_get('["a", [3, 9], "c"]', 1); -- JSON '[3,9]'

索引頁支持負數,表示從最后開始,-1表示最后一個元素。例:

SELECT json_array_get('["c", [3, 9], "a"]', -1); -- JSON 'a' (invalid JSON)

SELECT json_array_get('["c", [3, 9], "a"]', -2); -- JSON '[3,9]'

索引超過實際長度會返回null

 

json_array_length(json) → bigint

返回json的長度

 

json_extract(json, json_path) → json

按照json_path格式 抓取json中的信息

 

json_extract_scalar(json, json_path) → varchar

和json_extract功能相同,返回值是varchar

 

json_format(json) → varchar

把json值轉為序列化的json文本

 

json_parse(string) → json

和json_format(json)功能相反,將json格式的字符串轉換為json。

Json_parse和json_extract通常結合使用,用於解析數據表中的json字符串,例子:

Select json_extract(json_parse(sku_info),'$.purchase_price_rmb')

From chuangwai.sku_purchase_units limit 100

解析spu表中sku_info字段 里的采購價

 

json_size(json, json_path) → bigint

和json_extract類似,但是返回的是json里的對象個數。

SELECT json_size('{ "x": {"a": 1, "b": 2} }', '$.x'); => 2

SELECT json_size('{ "x": [1, 2, 3] }', '$.x'); => 2

SELECT json_size('{ "x": {"a": 1, "b": 2} }', '$.x.a'); => 0

 

6.13. 日期時間函數和運算符

日期時間運算符

運算符

示例

結果

+

date '2012-08-08' + interval '2' day

2012-08-10

+

time '01:00' + interval '3' hour

04:00:00.000

+

timestamp '2012-08-08 01:00' + interval '29' hour

2012-08-09 06:00:00.000

+

timestamp '2012-10-31 01:00' + interval '1' month

2012-11-30 01:00:00.000

+

interval '2' day + interval '3' hour

2 03:00:00.000

+

interval '3' year + interval '5' month

3-5

-

date '2012-08-08' - interval '2' day

2012-08-06

-

time '01:00' - interval '3' hour

22:00:00.000

-

timestamp '2012-08-08 01:00' - interval '29' hour

2012-08-06 20:00:00.000

-

timestamp '2012-10-31 01:00' - interval '1' month

2012-09-30 01:00:00.000

-

interval '2' day - interval '3' hour

1 21:00:00.000

-

interval '3' year - interval '5' month

2-7

 

 

時區轉換

運算符:AT TIME ZONE,用於設置一個時間戳的時區:

SELECT timestamp '2012-10-31 01:00 UTC';

2012-10-31 01:00:00.000 UTC

 

SELECT timestamp '2012-10-31 01:00 UTC' AT TIME ZONE 'Asia/Shanghai';

2012-10-30 09:00:00.000 Asia/Shanghai

 

日期時間函數

current_date -> date

返回當前日期(utc時區)

 

current_time -> time with time zone

返回當前時間(utc時區)

 

current_timestamp -> timestamp with time zone

返回當前時間戳(utc時區)

 

current_timezone() → varchar

返回當前時區

 

date(x) → date

將日期字面量轉換成日期類型的變量

 

from_iso8601_timestamp(string) → timestamp with time zone

將 ISO 8601 格式的時戳字面量轉換成帶時區的時戳變量

 

from_iso8601_date(string) → date

將 ISO 8601 格式的日期字面量轉換成日期類型的變量

 

from_unixtime(unixtime) → timestamp

將UNIX時戳轉換為時間戳

Select FROM_UNIXTIME(875996580) --1997-10-04 20:23:00.000

 

from_unixtime(unixtime, string) → timestamp with time zone

將UNIX時戳轉換成時戳變量.可以帶時區選項

 

from_unixtime(unixtime, hours, minutes) → timestamp with time zone

將 UNIX 時戳轉換成帶時區的時戳變量。hours和minutes表示時區偏移量。

 

localtime -> time

獲取當前時間

 

localtimestamp -> timestamp

獲取當前時間戳

 

now() → timestamp with time zone

獲取當前時間,current_time的別名

 

to_unixtime(timestamp) → double

將時間戳轉換成 UNIX 時間

 

to_iso8601(x) → varchar

將x轉換成ISO8601格式的字符串。這里x可以是DATE、TIMESTAMP [with time zone]這幾個類型

 

to_milliseconds(interval) → bigint

獲取當前距當天零時已經過去的毫秒數

 

to_unixtime(timestamp) → double

將時間戳轉換成 UNIX 時間

 

注意

使用下列 SQL 標准函數時,不用使用圓括號:

current_data

current_time

current_timestamp

localtime

Localtimestamp

 

截取函數

類似於保留幾位小數的操作,函數 date_trunc 支持如下單位:

單位

截取后的值

second

2001-08-22 03:04:05.000

minute

2001-08-22 03:04:00.000

hour

2001-08-22 03:00:00.000

day

2001-08-22 00:00:00.000

week

2001-08-20 00:00:00.000

month

2001-08-01 00:00:00.000

quarter

2001-07-01 00:00:00.000

year

2001-01-01 00:00:00.000

上面的例子使用時間戳: 2001-08-22 03:04:05.321 作為輸入。

date_trunc(unit, x) → [same as input]

返回x截取到單位unit之后的值

 

間隔函數

本章中的函數支持如下所列的間隔單位:

Unit

Description

second

Seconds

minute

Minutes

hour

Hours

day

Days

week

Weeks

month

Months

quarter

Quarters of a year

year

Years

date_add(unit, value, timestamp) → [same as input]

在timestamp的基礎上加上value個unit。如果想要執行相減的操作,可以通過將value賦值為負數來完成。

date_diff(unit, timestamp1, timestamp2) → bigint

返回 timestamp2 - timestamp1 之后的值,該值的表示單位是unit。

unit的值是字符串。例如:’day’ ‘week’ ‘year’

 

持續時間函數

持續時間可以使用以下單位:

單位

描述

ns

納秒

us

微秒

ms

毫秒

s

m

分鍾

h

小時

d

parse_duration(string) → interval

例子如下:

SELECT parse_duration('42.8ms'); -- 0 00:00:00.043

SELECT parse_duration('3.81 d'); -- 3 19:26:24.000

SELECT parse_duration('5m'); -- 0 00:05:00.000

 

MySQL 日期函數

在這一章節使用與MySQL date_parse和str_to_date方法兼容的格式化字符串。

date_format(timestamp, format) → varchar

使用format格式化timestamp。

 

date_parse(string, format) → timestamp

按format格式解析日期字面量。

下面的表格是基於MySQL手冊列出的,描述了各種格式化描述符:

格式化描述符

描述

%a

對應的星期幾 (Sun .. Sat)

%b

對應的月份 (Jan .. Dec)

%c

對應的月份 (1 .. 12) [4]

%D

對應該月的第幾天 (0th, 1st, 2nd, 3rd, ...)

%d

對應該月的第幾天, 數字(01 .. 31) (兩位,前面會補0)

%e

對應該月的第幾天, 數字 (1 .. 31)

%f

小數以下的秒(6 digits for printing: 000000 .. 999000; 1 - 9 digits for parsing: 0 .. 999999999) [1]

%H

小時(00 .. 23)

%h

小時(01 .. 12)

%I

小時(01 .. 12)

%i

分鍾, 數字(00 .. 59)

%j

一年的第幾天 (001 .. 366)

%k

小時(0 .. 23)

%l

小時(1 .. 12)

%M

月份名稱 (January .. December)

%m

月份, 數字(01 .. 12) [4]

%p

AM or PM

%r

時間, 12小時制(hh:mm:ss followed by AM or PM)

%S

秒(00 .. 59)

%s

秒(00 .. 59)

%T

時間, 24小時制 (hh:mm:ss)

%U

周(00 .. 53), 星期天是一周的第一天

%u

周(00 .. 53), 星期一是一周的第一天

%V

周(01 .. 53), 星期天是一周的第一天; 與%X配合使用

%v

星期 (01 .. 53), 第一條為星期一,與%X配合使用

%W

周幾 (Sunday .. Saturday)

%w

本周的第幾天 (0 .. 6), 星期天是一周的第一天

%X

年份,數字,4位,第一天為星期日

%x

年份,數字,4位,第一天為星期一

%Y

年份,數字,4位

%y

年份,數字,2位, 表示年份范圍為[1970, 2069]

%%

表示字符'%'

 

Warning

這些格式化描述符現在還不支持:%D %U %u %V %X

 

Java 日期函數

在這一章節中使用的格式化字符串都是與Java的 SimpleDateFormat樣式兼容的。

date_format(timestamp, format) → varchar

使用format格式化timestamp。

date_parse(string, format) → timestamp

解析時間戳字符串

 

抽取函數

extract(field FROM x) → bigint

從x中返回域field

可以使用抽取函數來抽取如下域:

描述

YEAR

year()

QUARTER

quarter()

MONTH

month()

WEEK

week()

DAY

day()

DAY_OF_MONTH

day()

DAY_OF_WEEK

day_of_week()

DOW

day_of_week()

DAY_OF_YEAR

day_of_year()

DOY

day_of_year()

YEAR_OF_WEEK

year_of_week()

YOW

year_of_week()

HOUR

hour()

MINUTE

minute()

SECOND

second()

TIMEZONE_HOUR

timezone_hour()

TIMEZONE_MINUTE

timezone_minute()

抽取函數支持的數據類型取決於需要抽取的域。大多數域都支持日期和時間類型。

Note

SQL標准的函數一般都會使用特定的語法來指定參數。

 

便利的抽取函數

day(x) → bigint

返回x對應的月份天數

day_of_month(x) → bigint

和day()一樣

day_of_week(x) → bigint

返回國際標准的周幾

day_of_year(x) → bigint

返回在一年的天數,值范圍:1~366

dow(x) → bigint

day_of_week()的另一種寫法

doy(x) → bigint

day_of_year()的另一種寫法

hour(x) → bigint

返回x所在的小時. The value ranges from 0 to 23.

minute(x) → bigint

返回x所在的分鍾

month(x) → bigint

返回x所在的月份

quarter(x) → bigint

返回x所在的季度。 The value ranges from 1 to 4.

second(x) → bigint

返回x所在的秒

timezone_hour(timestamp) → bigint

timezone_minute(timestamp) → bigint

week(x) → bigint

返回x所在的周數. The value ranges from 1 to 53.

week_of_year(x) → bigint

week()的另一種寫法.

year(x) → bigint

返回x所在的年份.

year_of_week(x) → bigint

yow(x) → bigint

 

6.14. 聚合函數

聚合函數作用於一個數據集,計算出一個單獨的結果。

除了 count() 、 count_if() 、 max_by() 和 approx_distinct() , 所有聚合函數都忽略空值,如果沒有輸入或全部輸入都為空時,返回空。 例如, sum() 返回空,而不是0。 avg() 會將數據中的空值進行計數。 coalesce 函數可以將空轉換為0。

有些聚合函數比如array_agg()的結果依據輸入值的順序。這種情況可以通過ORDER BY Clause 來確定一個輸出。

array_agg(x ORDER BY y DESC)

array_agg(x ORDER BY x, y, z)

 

一般聚合函數

 

arbitrary(x) → [same as input]

返回 x 的任意非空值(如果存在的話)。

array_agg(x) → array<[same as input]>

從輸入的元素中創建數組

avg(x) → double

返回所有輸入值的平均數(算術平均數)。

avg(time interval type) → time interval type

計算輸入時間序列的平均時間間隔

bool_and(boolean) → boolean

如果所有輸入的值都為 TRUE,則返回 TRUE,否則返回FALSE

bool_or(boolean) → boolean

如果輸入的序列中有一個為 True ,則返回 True ,否則返回 False

checksum(x) → varbinary

返回 x 的校驗和(順序不敏感)

count(*) → bigint

返回行數

count(x) → bigint

返回非 null 元素的個數

count_if(x) → bigint

返回 x 中元素為True 的個數,等同於count(CASE WHEN x THEN 1 END).

every(boolean) → boolean

同bool_and

geometric_mean(x) → double

返回 x 的幾何平均值

max_by(x, y) → [same as x]

返回與 y 的最大值相關的 x 值

max_by(x, y, n) → array<[same as x]>

返回與 y 的前 n 個最大值相關的 x 值的數組。

此方法很強,例如 統計銷量前五的供應商 max_by(供應商,銷量,5) ,可以替代一些使用row_number后再取前五的操作,會比row_number 性能更好 。

min_by(x, y) → [same as x]

返回與 y 的最小值相關的 x 值

min_by(x, y, n) → array<[same as x]>

返回與 y 的前 n 個最小值相關的 x 值的數組

max(x) → [same as input]

返回最大值

max(x, n) → array<[same as x]>

返回前 n 個最大值列表

min(x) → [same as input]

返回最小值

min(x, n) → array<[same as x]>

返回前 n 個最小值列表

sum(x) → [same as input]

求和

 

位運算聚合函數

bitwise_and_agg(x) → bigint

返回 x 中所有值的與操作結果,x 為數組

bitwise_or_agg(x) → bigint

返回 x 中所有值的或操作結果,x 位數組

 

Map聚合函數

histogram(x) -> map(K, bigint)

統計直方圖

map_agg(key, value) -> map(K, V)

創建一個MAP類型的變量

map_union(x(K, V)) -> map(K, V)

返回輸入map列表的 Union 結果,如果有多個 map 對象包含相同的key,最終的結果中,對於 key 的 value 隨機的從輸入的 map 中選取。

multimap_agg(key, value) -> map(K, array(V))

創建一個多重映射的MAP變量

 

近似聚合函數

不做詳解,具體參見官方文檔

 

統計聚合函數

不做詳解,具體參見官方文檔

 

6.15. 窗口函數

窗口函數主要用於在查詢結果的所有行之間進行計算。窗口函數運行在HAVING語句之后,但是運行在ORDER BY語句之前。如果想要調用窗口函數,需要使用OVER語句來指定窗口。一個窗口有3個組成部分。

例如:下面的查詢將orders表中的信息按照每個出納員營業額的大小進行排序:

SELECT orderkey, clerk, totalprice,

rank() OVER (PARTITION BY clerk

ORDER BY totalprice DESC) AS rnk

FROM orders

ORDER BY clerk, rnk

 

聚合函數

所有的聚合函數,都可以通過加上over關鍵字 變成窗口函數來使用。聚合函數 會計算 當前行所對應的所有窗口行。

舉例,下面查詢表示 對於每個clerk 按天順序 對訂單價格 累加。

SELECT clerk, orderdate, orderkey, totalprice,

sum(totalprice) OVER (PARTITION BY clerk

ORDER BY orderdate) AS rolling_sum

FROM orders

ORDER BY clerk, orderdate, orderkey

 

排序函數

cume_dist() → bigint

小於等於當前值的行數/分組內總行數

 

dense_rank() → bigint

具體見官方文檔

ntile(n) → bigint

具體見官方文檔

percent_rank() → double

分組內當前行的RANK值-1/分組內總行數-1

rank() → bigint

排序,可以存在並列情況

row_number() → bigint

排序,從1開始,無重復序號

 

值函數

first_value(x) → [same as input]

last_value(x) → [same as input]

nth_value(x, offset) → [same as input]

lead(x[, offset[, default_value]]) → [same as input]

lag(x[, offset[, default_value]]) → [same as input]

具體見官方文檔

 

6.16. array數組函數

6.17. map函數

6.18. url函數

6.19. 地理相關函數

6.20. 基數估算算法函數

6.21. Quantile Digest Functions

6.22. Color Functions

6.23. Session Information

6.24. Teradata Functions

以上不常用函數庫,具體見官方文檔 https://prestodb.github.io/docs/0.215/functions.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM