zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    搞懂分布式技术30:高并发解决方案——提升高并发量服务器性能解决思路
    海量数据处理
    海量数据处理
    Linux虚拟机的三种网络连接方式
    一篇文章,读懂Netty的高性能架构之道
    MYCAT学习笔记
    Java网络编程和NIO详解开篇:Java网络编程基础
    Java网络编程和NIO详解8:浅析mmap和Direct Buffer
    apache 2.4.23 只能本地访问,其他用户不能访问,提示You don't have permission to access
    python数据分析及展示(三)
  • 原文地址:https://www.cnblogs.com/LIAOBO/p/14977562.html
Copyright © 2011-2022 走看看