presto函数大全 中文版

Functions and Operators

基于Presto 0.215版本的中文注释 函数大全,参考官方文档: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

保留几位小数

select round(3.1415,2)   --3.14

 

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

以上不常用函数库,具体见官方文档

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:53个Python库,你必须要试试


下一篇:LeetCode 热题 HOT 100Java题解之53. 最大子数组和(击败了46.78%的用户)