20211008 FlinkSql测试-1.12版本

  • Post author:
  • Post category:其他

一、flinkSql-Client

/mnt/flink-1.12.4/bin/start-cluster.sh  --启动集群
/mnt/flink-1.12.4/bin/sql-client.sh embedded  --进入sql客户端

二、FlinkSql函数

1、比较函数

    = <> >  >= <  <=  
        注意:select null=null; 返回为null
    IS NULL 、 IS NOT NULL  
        --非空判断
    value1 IS DISTINCT FROM value2、value1 IS NOT DISTINCT FROM value2、  
        --不同于
    value1 BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3、value1 NOT BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3、 
        --如:select 1 between 0 and 2; 返回true。默认ASYMMETRIC 表示value1在闭区间内 [value2,value3]
    string1 LIKE string2 、string1 NOT LIKE string2 
        --如:select 'abc' like 'a%'; 返回true,用 '用%或_模糊数据'
    string1 SIMILAR TO string2 、string1 NOT SIMILAR TO string2 
        --string2 为正则表达式. 但测试失败 select 'fgh34444' SIMILAR TO  '[a-z][0-9]*'; 返回的false
    value1 IN (value2 [, value3]* )、value1 NOT IN (value2 [, value3]* )、
        -- select 'abc' in ('abc','e','f'); 返回true,要求类型必须一致(都为字符串,或都为)。select 1 in (1,2,3,4); 
    EXISTS (sub-query)、
        --select  EXISTS (select 1); 返回true(自查询至少返回一行时)
    value IN (sub-query)、value NOT IN (sub-query)
        --select 1 in (select 1); 值等于子查询返回的行(只限于一个值),返回true. select 'abc' in (select 'abc'); 

2、逻辑函数

    OR 、AND、NOT boolean、boolean IS FALSE、boolean IS NOT FALSE、boolean IS TRUE、boolean IS NOT TRUE、boolean IS UNKNOWN、boolean IS NOT UNKNOWN
        --select null=null  IS UNKNOWN; 返回true

3、算术函数

    + numeric、- numeric --返回对应的正负数字
    + - * / 
    % 、MOD(numeric1, numeric2) 
    	-- select MOD(3,2); 3除以2的余数=1.仅当numeric1为负时结果为负
    POWER(numeric1, numeric2) 
    	--select POWER(2,3); 返回2 的 3次幂=8.0
    ABS(numeric) 
    	--select ABS(-1); 返回绝对值1
    CEIL(numeric) --向上取整  select CEIL(2.3); 返回3.000000
    FLOOR(numeric) --向下取整 select FLOOR(2.3); 返回2.000000
    ROUND(numeric, integer) 取整
        --select ROUND(2.3,1); 保留1位小数2.30000。
        --select ROUND(2.3,0); 保留0位小数 2.0000
    TRUNCATE(numeric1, integer2) 
        --select TRUNCATE(2.3,1);保留1位小数2.30000  select TRUNCATE(2.3,0) 保留0位小数 2.0000
    RAND() --介于 0.0(含)和 1.0(不含)之间的伪随机双精度值
    RAND(integer) --介于 0.0(含)和 1.0(不含)之间的伪随机双精度值。两个 RAND 函数具有相同的初始种子,它们将返回相同的数字序列。
    RAND_INTEGER(integer) --介于 0(含)和整数(不含)之间的伪随机整数值
     --使用初始种子返回 0(含)和指定值(不含)之间的伪随机整数值
    UUID() --返回 UUID(通用唯一标识符)字符串(例如,“3d3c68f7-f608-473f-b60c-b0c44ad4cc4e”)。UUID 是使用加密强的伪随机数生成器生成的。
    BIN(integer) --以二进制格式返回整数的字符串表示形式。如果整数为 NULL,则返回NULL。例如,BIN(4)返回“100”并BIN(12)返回“1100”
    HEX(numeric 或 string) --以十六进制格式返回整数数值或字符串的字符串表示形式

4、字符串函数


    string1 || string2  --拼接
        --select 'abc' || 'def'; 返回abcdef
    CHAR_LENGTH(string)  --字符个数
        --select CHAR_LENGTH('abcdef'); 返回 6 
    UPPER(string) --转大写
        --select UPPER('aBc'); 返回 ABC
    LOWER(string) --转小写
        --select LOWER('aBc'); 返回abc
    POSITION(string1 IN string2) --字串位置
        --select POSITION('ab' in 'cdabcds'); 返回3
    TRIM([ BOTH | LEADING | TRAILING ] string1 FROM string2) --默认从两边去除第一个
        --select TRIM('  abc    ' from '  abcdefabc  '); 返回def 。select TRIM('  abc    '); 返回abc  两边的空格都被删除
    LTRIM(string) --去除左边的空格
    RTRIM(string) --去除右边的空格
    REPEAT(string, integer) --重复字符串整数次
        --select REPEAT('ab',3); 返回 ababab
    REGEXP_REPLACE(string1, string2, string3) --将string1中符合正则表达式的 替换为 string3
        --select REGEXP_REPLACE('foobar', 'oo|ar', ''); 返回 fb  
    OVERLAY(string1 PLACING string2 FROM integer1 [ FOR integer2 ]) --将指定位置的字符串替换
        --select OVERLAY('This is an old string' PLACING ' new' FROM 10 FOR 5);  返回 This is a new string  --不含FROM 10
    SUBSTRING(string FROM integer1 [ FOR integer2 ]) --从指定位置截取指定长度的字串
        --select SUBSTRING('This is an old string'FROM 10 FOR 5);  返回 n old   --含FROM 10
    REPLACE(string1, string2, string3) --替换
        --select REPLACE('ababab', 'abab', 'z');  用z替换abab 返回zab
    REGEXP_EXTRACT(string1, string2[, integer]) --?
        --select REGEXP_EXTRACT('foothebar', 'foo(.*?)(bar)', 2); 返回 bar  --正则表达式匹配组索引从 1 开始,0 表示匹配整个正则表达式
    INITCAP(string) --第一个字符转换为大写,其余字符转换为小写
        --select INITCAP('aBc');  返回 Abc
    CONCAT(string1, string2,...) --拼接,如果任何参数为 NULL,则返回 NULL。

    CONCAT_WS(string1, string2, string3,...) --拼接,第一个字符拼接符不为null则不为null
        --select CONCAT_WS('~', 'AA', NULL, 'BB', '', 'CC');会报错 Illegal use of 'NULL'  --但官网说会跳过null
        --select CONCAT_WS('~', 'AA', 'BB', '', 'CC'); 返回“AA~BB~~CC”
    LPAD(string1, integer, string2) --从string1左边填充string2到整数字符的长度。如果string1的长度小于integer,则返回string1缩短为整数字符
        --LPAD('hi',4,'??')返回“??hi”;LPAD('hi',1,'??')返回“h”。 
    RPAD(string1, integer, string2) --从右边填充
        --RPAD('hi',4,'??')返回“hi??”,RPAD('hi',1,'??')返回“h”
    FROM_BASE64(string) --从string返回 base64 解码的结果;如果字符串为 NULL,则返回NULL。
        --FROM_BASE64('aGVsbG8gd29ybGQ=')返回“hello world”。
    TO_BASE64(string) --从string返回 base64 编码的结果;如果字符串为 NULL,则返回NULL。
        --TO_BASE64('hello world')返回“aGVsbG8gd29ybGQ=”。
    ASCII(string) --	返回string的第一个字符的数值
        --ascii('abc')返回 97 (a的ascii码),并ascii(CAST(NULL AS VARCHAR))返回 NULL。
    CHR(integer) --返回二进制等效于integer的 ASCII 字符.如果整数大于 255,我们将先得到整数除以 255的模数,并返回模数的CHR。如果整数为 NULL,则返回NULL。
        --chr(97)返回a,chr(353)返回a
    DECODE(binary, string) ---使用提供的字符集('US-ASCII''ISO-8859-1''UTF-8''UTF-16BE''UTF-16LE''UTF- 16')
        --报错
    ENCODE(string1, string2); --使用指定
        --select ENCODE('a', 'UTF-8');   --报错
    INSTR(string1, string2)  --返回string2在string1 中第一次出现的位置
        --select INSTR('bcab','a'); 返回3
    LEFT(string, integer) --从左边截取
        --select LEFT('abc2awe',2);   返回ab
    RIGHT(string, integer) --从右边截取
        --select RIGHT('abcawe',3); 返回awe 从右边截取3个
    LOCATE(string1, string2[, integer]) --返回string2中string1在位置integer之后第一次出现的位置。如果未找到,则返回 0
        --select LOCATE('abcdefabc','a',3); 返回0 --不符合预期
    PARSE_URL(string1, string2[, string3])
        --select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST'); 返回 facebook.com
    REGEXP(string1, string2) --如果string1 的任何(可能为空)子字符串与 Java 正则表达式string2匹配,则返回 TRUE 
    REVERSE(string) --反转 
        --select REVERSE('abc'); 返回cba 
    SPLIT_INDEX(string1, string2, integer1) --用分割符分割后取第n个字串(从0开始)
        --select SPLIT_INDEX('abc|def|ghi','|',2); 返回ghi 
    STR_TO_MAP(string1[, string2, string3]]) --使用分隔符将string1拆分为键/值对后返回一个映射。string2是对分隔符,默认为 ','。而string3是键值分隔符,默认为 '='
        --select STR_TO_MAP('a=1,b=2,c=3'); 返回 {a=1, b=2, c=3}
        --select STR_TO_MAP('a:1|b:2|c:3','|',':'); 返回  的结果不符合预期   {=, a=null, 1=null, b=nu~
    SUBSTR(string[, integer1[, integer2]]) --返回字符串的子字符串,从位置 integer1 开始,长度为 integer2(默认到末尾)。
        --select substr('abc',1,2); 返回ab

5、时间函数(时间搓单位都是秒)

            timeintervalunit时间单位:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,或YEAR。
            select REPLACE('hello world', 'world', 'flink') returns "hello flink"; REPLACE('ababab', 'abab', 'z') returns "zab".
            select CONCAT('AA', 'BB', 'CC') returns "AABBCC";
    DATE_FORMAT(timestamp, string) 此功能存在严重错误,暂时不要使用。
    INTERVAL string range   使用报错
        --select INTERVAL '10 00:00:00.004' DAY TO SECOND;
        --select INTERVAL '1' HOUR;  
        --select INTERVAL '1' MINUTE;
    CURRENT_DATE        UTC 时区 系统日期
        --select CURRENT_DATE; 返回 2021-10-08
    CURRENT_TIME        UTC 时区 系统时间
        --select CURRENT_TIME; 返回 09:25:28.137
    CURRENT_TIMESTAMP  UTC 时区 系统时间搓,TIMESTAMP 类型
        --select CURRENT_TIMESTAMP; 返回 2021-10-08T09:23:15.180  --数据不对,和时区有关系
    LOCALTIMESTAMP 本地时区系统时间, TIMESTAMP 类型
        --select LOCALTIMESTAMP; 返回 2021-10-08T17:19:47.787 --时间对
    LOCALTIME 系统时间字符串(HH:mm:ss)
        --select LOCALTIME; 返回 17:22:16.212
    EXTRACT(timeintervalunit FROM temporal) 取日期中的年/月/日 返回整数
        --select EXTRACT(DAY FROM DATE '2006-06-05'); 返回  日 为 5
        --select EXTRACT(MONTH FROM DATE '2006-06-05'); 返回  月 为 6
        --select EXTRACT(YEAR FROM DATE '2006-06-05'); 返回  年 为 2006
    YEAR(date) 年份
        --select YEAR(TO_DATE('2021-10-08 08:45:17'));  返回2021
    QUARTER(date) 几季度
        --select QUARTER(TO_DATE('2021-10-08 08:45:17'));  返回4
    MONTH(date) 几月
        --select MONTH(TO_DATE('2021-10-08 08:45:17'));  返回 10
    WEEK(date) 几周
        --select WEEK(TO_DATE('2021-10-08 08:45:17'));  返回 40
    DAYOFYEAR(date) 一年中的第几天
        --select DAYOFYEAR(TO_DATE('2021-10-08 08:45:17'));  返回281
    DAYOFMONTH(date) 一月中的第几天
        --select DAYOFMONTH(TO_DATE('2021-10-08 08:45:17')); 返回8
        --select DAYOFMONTH(TO_DATE(FROM_UNIXTIME(1631061917)));  -- 结果:8
        --select DAYOFMONTH(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))); --参数为DATE类型  当前时间为月份中的多少号  14号
    DAYOFWEEK(date) 一周中的第几天
        --select DAYOFWEEK(TO_DATE('2021-10-08 08:45:17'));   返回6,实际是5
    HOUR(timestamp) 返回小时数
        --select HOUR(TIMESTAMP '2021-09-08 08:45:17'); 返回 8
    MINUTE(timestamp) 返回分钟数
        --select MINUTE(TIMESTAMP '2021-09-08 08:45:17'); 返回  45
    SECOND(timestamp)  返回秒数
        --select SECOND(TIMESTAMP '2021-09-08 08:45:17'); 返回 17
    FLOOR(timepoint TO timeintervalunit) 向下取整分钟 
        --select FLOOR(TIME '12:44:31' TO MINUTE); 返回 12:44 
    CEIL(timepoint TO timeintervalunit)  向上取整分钟,回合时间点到时间单元timeintervalunit。
        -- select CEIL(TIME '12:44:31' TO MINUTE); 返回 12:45 
    (timepoint1, temporal1) OVERLAPS (timepoint2, temporal2)( timepoint1 , temporal1 )( timepoint2 , temporal2 )定义的两个时间间隔重叠,则返回 TRUE 
        --select (TIME '2:55:00', INTERVAL '1' HOUR) OVERLAPS (TIME '3:30:00', INTERVAL '2' HOUR); 返回true
        --select (TIME '9:00:00', TIME '10:00:00') OVERLAPS (TIME '10:15:00', INTERVAL '3' HOUR); 返回false
    DATE string  日期字符串(yyyy-MM-dd)转为 DATE 类型
        --select Date '2021-09-08'; 返回  2021-09-08
    TIME string  时间字符串转(HH:mm:ss)为 TIME 类型
        --select TIME '08:45:17';  返回 08:45:17 

    TO_DATE(string1[, string2])  将日期时间字符串(yyyy-MM-dd HH:mm:ss)转为 DATE 类型
        --select TO_DATE(FROM_UNIXTIME(1631061917)) 结果为 2021-09-08 ,因 TO_DATE 是转为日
        --select TO_DATE('2021-09-08 08:45:17'); 返回 2021-09-08
    TO_TIMESTAMP(string1[, string2])  将时间字符串转为 TIMESTAMP 类型
        --select TO_TIMESTAMP('2021-09-08 08:45:17','yyyy-MM-dd HH:mm:ss'); 返回 2021-09-08T08:45:17  到秒
        --select TO_TIMESTAMP('2021-09-08 08:45','yyyy-MM-dd HH:mm'); 返回 2021-09-08T08:45  到分钟
    TIMESTAMP string  将时间字符串(“yyyy-MM-dd HH:mm:ss[.SSS]”的形式)转为 TIMESTAMP 类型
        --select TIMESTAMP '2021-09-08 08:45:17'; 返回 2021-09-08T08:45:17
    NOW() 系统时间,返回 TIMESTAMP 类型
        --select NOW(); 返回  2021-10-08T08:50:01.486
    UNIX_TIMESTAMP() 系统时间搓,返回整数
        --select UNIX_TIMESTAMP(); 返回 1633680986
    UNIX_TIMESTAMP(string1[, string2]) 返回整数,时间字符串(默认情况下:yyyy-MM-dd HH:mm:ss 如果未指定)转换为 Unix 时间戳(以秒为单位)。
        --select UNIX_TIMESTAMP('2021-09-08 08:45:17','yyyy-MM-dd HH:mm:ss'); 返回 1631061917
    FROM_UNIXTIME(numeric[, string])  将整数转为时间 字符串(默认为 'yyyy-MM-dd HH:mm:ss') 类型
        --select FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyy-MM-dd HH:mm');  返回 2021-10-08 16:28  到分钟
        --select FROM_UNIXTIME(1631061917);    返回 2021-09-08 08:45:17 
        --select FROM_UNIXTIME(UNIX_TIMESTAMP()); 返回当前日期  2021-10-08 16:18:32 
        --select FROM_UNIXTIME(1631061917) >TIMESTAMPADD(MINUTE, -5, NOW());  --结果: false
    TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)  时间搓差。
        --select TIMESTAMPDIFF(MINUTE,TIMESTAMP FROM_UNIXTIME(place_time/1000),  UNIX_TIMESTAMP())<5  --近5分钟
        --select TIMESTAMPDIFF(MINUTE, TIMESTAMP '2003-01-03 10:10:00', TIMESTAMP '2003-01-03 10:00:00');  --结果为-10  后面-前面的 分钟差.
    TIMESTAMPADD(timeintervalunit, interval, timepoint)   向前/后推时间。timeintervalunit时间单位:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,或YEAR。
        --select TIMESTAMPADD(MINUTE, -5, NOW()) ;  --当前时间往前推5分钟: 2021-10-08T08:33:48.108   ,但可能因时区原因有显示的时间有差异
        --select TIMESTAMPADD(SECOND, -5, TO_DATE(FROM_UNIXTIME(1631061917)));   --按 天取整后 往前推5秒结果:2021-09-07T23:59:55 .往前推5秒钟  16310619172021-09-08 08:45:17

    CONVERT_TZ(string1, string2, string3) 将日期时间格式字符串 从时区string2转换为时区string3
        --select CONVERT_TZ('1970-01-01 00:00:00', 'UTC', 'America/Los_Angeles');  返回 1969-12-31 16:00:00

6、条件函数


    CASE value WHEN value1_1  THEN result1 ELSE resultZ  END   满足某一个值 
        --select CASE 'a' WHEN 'a'  THEN 1 ELSE 0  END;  返回 1 
        --select CASE 'b' WHEN 'a'  THEN 1 ELSE 0  END;  返回 0
    CASE WHEN condition1 THEN result1 ELSE resultZ END  满足某一个条件时
        --select CASE  WHEN 10>5  THEN 1 ELSE 0  END;  返回 1
        --select CASE  WHEN  4>5   THEN 1 ELSE 0  END;  返回 0
    NULLIF(value1, value2)  等值判断:如果value1等于value2则返回 NULL ;否则返回value1。
        --NULLIF(5, 5)返回NULL;NULLIF(5, 0)返回 5。
    COALESCE(value1, value2 [, value3 ]* )  返回第一个不为 NULL 的值
        --select COALESCE(NULL, 5,3); 返回5
    IF(condition, true_value, false_value) 
        --select IF(10>5,1,0); 返回 1
    IS_ALPHA(string)  字符串中的所有字符都是字母,则返回真,否则返回假。
        --select IS_ALPHA('abc'); 返回true
        --select IS_ALPHA('abc1'); 返回false
    IS_DECIMAL(string) 如果string可以解析为有效数字,则返回 true ,否则返回 false。
        --select IS_DECIMAL('123'); 返回true
        --select IS_DECIMAL('abc1'); 返回false
    IS_DIGIT(string) 如果字符串中的所有字符都是数字,则返回真,否则返回假。
        --select IS_DIGIT('123'); 返回true
        --select IS_DIGIT('abc1'); 返回false

7、类型强转函数

    CAST(value AS type) 强转
        --select CAST('42' AS INT); 返回 42;
        --select CAST(NULL AS VARCHAR); 返回 VARCHAR 类型的 NULL。

8、集合函数

    array [ value1,value2... ] 构建 数组 
    数组名[n]  取数组的第n个元素。索引从 1 开始
        --select arr[2] from (select array [1,4,5] arr)t;  返回 4
        --select array ['a','b','c']; 返回 [a, b, c]
    map [key1,value1,key2,value2]  构建map集合
    集合名[key值] 取key对应的value
        --select  mp[2] from (select map [1,'a',2,'b'] mp)t; 返回 b
        --select map [1,'a',2,'b']; 返回   {1=a, 2=b} 
    CARDINALITY(map) 返回map 中的条目数 。
        --select CARDINALITY(map [1,'a',2,'b']); 返回 2
    CARDINALITY(array) 返回array 中的元素个数。
       select CARDINALITY(array [1,2,3,0,0]); 返回5
    ELEMENT(array) 返回数组的唯一元素(其基数应为 1);如果数组为空,则返回 NULL 。如果数组有多个元素,则抛出异常。
        --select ELEMENT(array [1,2,3,0,0]) ;  --执行失败
        --select ELEMENT(array [2]) ; 返回2

9、值访问函数

    tableName.compositeType.field  按名称从 Flink 复合类型(例如,Tuple、POJO)返回字段的值。
    tableName.compositeType.*  返回 Flink 复合类型(例如,Tuple、POJO)的平面表示,将其每个直接子类型转换为单独的字段。在大多数情况下,平面表示的字段与原始字段的命名类似,但使用美元分隔符(例如,mypojo$mytuple$f0)。

10、分组功能

    GROUP_ID() 返回唯一标识分组键组合的整数。
    GROUPING(expression1 [, expression2]* )
    GROUPING_ID(expression1 [, expression2]* )
    返回给定分组表达式的位向量。

11、哈希函数

    MD5(string)32 个十六进制数字的字符串形式返回string的 MD5 哈希值;如果字符串为 NULL,则返回NULL。
    SHA1(string)40 个十六进制数字的字符串形式返回string的 SHA-1 哈希值;如果字符串为 NULL,则返回NULL。
    SHA224(string)56 个十六进制数字的字符串形式返回string的 SHA-224 哈希值;如果字符串为 NULL,则返回NULL。
    SHA256(string)64 个十六进制数字的字符串形式返回string的 SHA-256 哈希值;如果字符串为 NULL,则返回NULL。
    SHA384(string)96 个十六进制数字的字符串形式返回string的 SHA-384 哈希值;如果字符串为 NULL,则返回NULL。
    SHA512(string)128 个十六进制数字的字符串形式返回string的 SHA-512 哈希值;如果字符串为 NULL,则返回NULL。
    SHA2(string, hashLength) 使用 SHA-2 系列散列函数(SHA-224、SHA-256、SHA-384 或 SHA-512)返回散列。第一个参数字符串是要散列的字符串,第二个参数hashLength是结果的位长(224256384512)。如果string或hashLength为 NULL,则返回NULL

12、聚合函数

    COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*) 默认情况下或使用 ALL,返回表达式不为 NULL的输入行数。对每个值的一个唯一实例使用 DISTINCTCOUNT(*) COUNT(1) 返回输入行数。
    AVG([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的平均值(算术平均值)。对每个值的一个唯一实例使用 DISTINCTSUM([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行的表达式总和。对每个值的一个唯一实例使用 DISTINCTMAX([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的最大值。对每个值的一个唯一实例使用 DISTINCTMIN([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的最小值。对每个值的一个唯一实例使用 DISTINCT。
    STDDEV_POP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的总体标准偏差。对每个值的一个唯一实例使用 DISTINCT。
    STDDEV_SAMP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的样本标准偏差。对每个值的一个唯一实例使用 DISTINCT。
    VAR_POP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的总体方差(总体标准差的平方)。对每个值的一个唯一实例使用 DISTINCT。
    VAR_SAMP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的样本方差(样本标准差的平方)。对每个值的一个唯一实例使用 DISTINCT。
    COLLECT([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回跨所有输入行的多组表达式。NULL 值将被忽略。对每个值的一个唯一实例使用 DISTINCT。
    VARIANCE([ ALL | DISTINCT ] expression) VAR_SAMP() 的同义词。仅在眨眼规划器中受支持。
    RANK() 返回值在一组值中的排名。结果是 1 加上分区顺序中当前行之前或等于当前行的行数。这些值将在序列中产生间隙。仅在眨眼规划器中受支持。
    DENSE_RANK() 返回值在一组值中的排名。结果是一加先前分配的等级值。与函数 rank 不同,dense_rank 不会在排名序列中产生间隙。仅在眨眼规划器中受支持。
    ROW_NUMBER() 根据窗口分区内行的顺序,为每一行分配一个唯一的序列号,从一开始。
    ROW_NUMBER 和 RANK 相似。ROW_NUMBER 按顺序对所有行进行编号(例如 12345)。RANK 为平局提供相同的数值(例如 12245)。仅在眨眼规划器中受支持。
    LEAD(expression [, offset] [, default] ) 返回窗口中当前行之前偏移第 th 行处的expression值。的默认值的偏移是1和默认值默认为NULL。仅在眨眼规划器中受支持。
    LAG(expression [, offset] [, default]) 返回窗口中当前行后偏移第 th 行处的expression值。的默认值的偏移是1和默认值默认为NULL。 仅在眨眼规划器中受支持。
    FIRST_VALUE(expression) 返回一组有序值中的第一个值。 仅在眨眼规划器中受支持。
    LAST_VALUE(expression) 返回一组有序值中的最后一个值。仅在眨眼规划器中受支持。
    LISTAGG(expression [, separator]) 连接字符串表达式的值并在它们之间放置分隔符值。字符串末尾不添加分隔符。分隔符的默认值为“,”。仅在眨眼规划器中受支持。

版权声明:本文为m0_54691436原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。