SELECT avg(price) AS result FROM transactions;
复制
avg
函数语法 | 返回类型 | 描述 |
---|---|---|
avg(expr) |
DOUBLE |
计算并返回表达式的平均值。 |
参数说明:
-
expr:指定用于计算的表达式,支持对字符串类型的数字进行隐性转换。
使用示例:
返回示例:
+----------+ | result | +----------+ | 12.3295 | +----------+
复制
collect_set
函数语法 | 返回类型 | 描述 |
---|---|---|
collect_set(expr) |
ARRAY |
从输入值中创建一个集合,包含不同的值,从而实现去重的效果。 |
参数说明:
-
expr:指定用于计算的表达式。
使用示例:
从一个表中的多列中创建一个包含不同值的集合。
SELECT collect_set(amount) AS result FROM transactions;
复制
返回示例:
+-------------------------------------------------------+ | result | +-------------------------------------------------------+ | [800,400,500,100,1300,900,200,1000,600,1100,300,700] | +-------------------------------------------------------+
复制
compute_stats
函数语法 | 返回类型 | 描述 |
---|---|---|
compute_stats(expr) |
STRUCT |
返回一组基本类型值的统计摘要。 |
参数说明:
-
expr:指定用于统计的表达式。
使用示例:
查看 transactions 表中,成交单价(price)的统计摘要信息,包含列类型、最小值、最大值、空值数量等信息。
SELECT compute_stats(price) AS result FROM transactions;
复制
返回示例:
+---------------------------------------------------------------------------------------+ | result | +---------------------------------------------------------------------------------------+ | {"columntype":"Double","min":4.16,"max":68.43,"countnulls":0,"numdistinctvalues":20} | +---------------------------------------------------------------------------------------+
复制
count
函数语法 | 返回类型 | 描述 |
---|---|---|
count(expr) |
INTEGER |
统计由表达式定义的行数量。 |
参数说明:
-
expr:指定用于统计的表达式,当设置为列名时,则仅计算该列中非 NULL 值的行数。
使用示例:
SELECT count(*) AS result FROM transactions;
复制
返回示例:
+---------+ | result | +---------+ | 20 | +---------+
复制
covar_pop
函数语法 | 返回类型 | 描述 |
---|---|---|
covar_pop(expr1, expr2) |
DOUBLE |
返回两列数值的总体协方差,计算公式:当 expr1 和 expr2 都不为 NULL 时, |
参数说明:
-
expr1、expr2:分别指定用于计算的一对表达式。
使用示例:
SELECT covar_pop(price,amount) AS result FROM transactions;
复制
返回示例:
+----------------------+ | result | +----------------------+ | -1740.9275000000002 | +----------------------+
复制
covar_samp
函数语法 | 返回类型 | 描述 |
---|---|---|
covar_samp(expr1, expr2) |
DOUBLE |
返回两列数值的样本协方差,计算公式:当 expr1 和 expr2 都不为 NULL 时, |
参数说明:
-
expr1、expr2:分别指定用于计算的一对表达式。
使用示例:
SELECT covar_samp(price,amount) AS result FROM transactions;
复制
返回示例:
+----------------------+ | result | +----------------------+ | -1832.5552631578948 | +----------------------+
复制
csum
函数语法 | 返回类型 | 描述 |
---|---|---|
csum(expr, order_expr) |
与 expr 相同,字符串会转换为 DOUBLE |
计算并返回表达式的连续累计值,同时支持排序。 |
参数说明:
-
expr:指定用于统计的表达式。
-
order_expr:可选,指定排序的表达式(如列名),支持的排序方式为 ASC(升序,默认)或 DESC(降序)。
使用示例:
由于该函数属于 Teradata 方言,我们需要先设置服务器方言为 Teradata,同时为避免因建表方言不一致引发数据读取报错,我们还需要跳过查询时的方言检查,具体流程如下:
-- 设置方言为 Teradata set server.dialect=td; -- 跳过方言检查 set argodb.ignore.dialect.enabled=true; -- 使用 scum 函数 SELECT trans_type, csum(price,trans_type ASC) AS result FROM transactions;
复制
返回示例:
+-------------+---------------------+ | trans_type | result | +-------------+---------------------+ | b | 6.36 | | b | 74.79 | | b | 85.9 | | b | 91.15 | | b | 98.17 | | b | 110.3 | | b | 128.68 | | b | 138.49 | | s | 148.8 | | s | 153.3 | | s | 159.42000000000002 | | s | 168.58 | | s | 176.07000000000002 | | s | 186.10000000000002 | | s | 208.76000000000002 | | s | 212.92000000000002 | | s | 220.44000000000003 | | s | 225.74000000000004 | | s | 237.95000000000005 | | s | 246.59000000000003 | +-------------+---------------------+
复制
corr
函数语法 | 返回类型 | 描述 |
---|---|---|
corr(expr1, expr2) |
STRING |
计算并返回两个表达式的皮尔逊相关系数。 |
参数说明:
-
expr1、expr2:分别指定用于计算的一对表达式。
使用示例:
SELECT corr(price,amount) AS result FROM transactions;
复制
返回示例:
+-----------------------+ | result | +-----------------------+ | -0.34113419294612246 | +-----------------------+
复制
ewah_bitmap
函数语法 | 返回类型 | 描述 |
---|---|---|
ewah_bitmap(expr) |
STRING |
返回列的 EWAH 压缩位图表示形式。 |
参数说明:
-
expr:指定用于转换的表达式。
使用示例:
SELECT ewah_bitmap(trans_type) AS result FROM transactions;
复制
返回示例:
+--------------+ | result | +--------------+ | [0,1,4,0,0] | +--------------+
复制
histogram_numeric
函数语法 | 返回类型 | 描述 |
---|---|---|
histogram_numeric(expr, int) |
ARRAY |
以 int 为基准计算表达式的直方图信息。 |
参数说明:
-
expr:指定用于计算的表达式。
-
int:指定一个整数作为基准。
使用示例:
SELECT histogram_numeric(price,2) AS result FROM transactions;
复制
返回示例:
+---------------------------------------------------------+ | result | +---------------------------------------------------------+ | [{"x":9.376842105263158,"y":19.0},{"x":68.43,"y":1.0}] | +---------------------------------------------------------+
复制
kurtosis
函数语法 | 返回类型 | 描述 |
---|---|---|
kurtosis(express) |
DOUBLE |
计算一组数值的峰度值,用于度量数据分布相对于正态分布的尖锐程度。峰度值大于 0 表示数据分布比正态分布更尖锐,峰度值小于 0 表示数据分布比正态分布更平坦,峰度值等于 0 表示数据分布与正态分布相似。 |
参数说明:
-
expr:指定用于计算峰度值的表达式。
使用示例:
计算 transactions 表中,成交单价(price)的峰度值。
SELECT kurtosis(price) AS result FROM transactions;
复制
返回示例:
+---------------------+ | result | +---------------------+ | 15.306714699109587 | +---------------------+
复制
max
函数语法 | 返回类型 | 描述 |
---|---|---|
max(expr) |
与 expr 类型相同 |
返回表达式中的最大值。 |
参数说明:
-
expr:指定用于计算的表达式。
使用示例:
SELECT max(price) AS result FROM transactions;
复制
返回示例:
+---------+ | result | +---------+ | 68.43 | +---------+
复制
mavg
函数语法 | 返回类型 | 描述 |
---|---|---|
mave(expr,n,sort_expr) |
与 expr 相同,字符串会转换为 FLOAT |
基于指定的行数(查询宽度)计算一列的移动平均值。如果行数小于这个宽度,则基于前面已有的行计算平均值。 |
参数说明:
-
expr:指定用于统计的表达式。
-
n:查询宽度,即计算中要使用的先前行数,取值范围 1 ~ 4096。
-
order_expr:可选,指定排序的表达式(如列名),支持的排序方式为 ASC(升序,默认)或 DESC(降序)。
使用示例:
由于该函数属于 Teradata 方言,我们需要先设置服务器方言为 Teradata,同时为避免因建表方言不一致引发数据读取报错,我们还需要跳过查询时的方言检查,具体流程如下:
-- 设置方言为 Teradata set server.dialect=td; -- 跳过方言检查 set argodb.ignore.dialect.enabled=true; -- 使用 mavg 函数 SELECT STR_TO_DATE(substr(trans_time, 1, 8),'yyyyMMdd') date, price, mavg(price,7,trans_time) AS result FROM transactions LIMIT 6;
复制
返回示例:
+-------------+--------+---------------------+ | date | price | result | +-------------+--------+---------------------+ | 2014-01-05 | 12.13 | 12.13 | | 2014-02-05 | 11.11 | 11.620000000000001 | | 2014-02-14 | 4.16 | 9.133333333333335 | | 2014-02-28 | 9.16 | 9.14 | | 2014-03-14 | 10.31 | 9.374 | | 2014-03-15 | 22.66 | 11.588333333333333 | +-------------+--------+---------------------+
复制
mdiff
函数语法 | 返回类型 | 描述 |
---|---|---|
mdiff(expr,n,sort_expr) |
与 expr 相同,字符串会转换为 DOUBLE |
基于指定的查询宽度计算一列的移动差分值。 |
参数说明:
-
expr:指定用于统计的表达式。
-
n:查询宽度,即计算中要使用的先前行数,取值范围 1 ~ 4096。
-
order_expr:可选,指定排序的表达式(如列名),支持的排序方式为 ASC(升序,默认)或 DESC(降序)。
使用示例:
由于该函数属于 Teradata 方言,我们需要先设置服务器方言为 Teradata,同时为避免因建表方言不一致引发数据读取报错,我们还需要跳过查询时的方言检查,具体流程如下:
-- 设置方言为 Teradata set server.dialect=td; -- 跳过方言检查 set argodb.ignore.dialect.enabled=true; -- 使用 mavg 函数 SELECT STR_TO_DATE(substr(trans_time, 1, 8),'yyyyMMdd') date,amount,mdiff(amount,1,trans_time) AS result FROM transactions LIMIT 6;
复制
返回示例:
+-------------+---------+---------+ | date | amount | result | +-------------+---------+---------+ | 2014-01-05 | 200 | NULL | | 2014-02-05 | 300 | 100 | | 2014-02-14 | 600 | 300 | | 2014-02-28 | 100 | -500 | | 2014-03-14 | 400 | 300 | | 2014-03-15 | 200 | -200 | +-------------+---------+---------+
复制
min
函数语法 | 返回类型 | 描述 |
---|---|---|
min(expr) |
与 expr 类型相同 |
返回表达式中的最小值。 |
参数说明:
-
expr:指定用于计算的表达式。
使用示例:
SELECT min(price) AS result FROM transactions;
复制
返回示例:
+---------+ | result | +---------+ | 4.16 | +---------+
复制
percentile
函数语法 | 返回类型 | 描述 |
---|---|---|
percentile(expr, p) |
DOUBLE Array<Double> |
返回位于组中指定位置处表达式的确切百分位值。 |
参数说明:
-
expr:指定用于计算的表达式,值的类型为 BIGINT 或 INT,如果表达式为单值,则跳过计算,直接返回该值。
-
p:指定要计算百分位值的位置,范围为 0~1 的数值表达式,支持数组形式,格式为
array(p1,p2…)
,不支持浮点型数值。
使用示例(非数组):
SELECT percentile(amount, 0.2) AS result FROM transactions;
复制
返回示例:
+---------------------+ | result | +---------------------+ | 180.00000000000003 | +---------------------+
复制
使用示例(数组):
SELECT percentile(amount, array(0.2,0.8)) AS result FROM transactions;
复制
返回示例:
+-----------------------------------------+ | result | +-----------------------------------------+ | [180.00000000000003,920.0000000000002] | +-----------------------------------------+
复制
percentile_approx
函数语法 | 返回类型 | 描述 |
---|---|---|
percentile_approx(expr, p [, accuracy]) |
DOUBLE Array<Double> |
返回组中数值列(包括浮点类型)的近似第 p 个百分位数,返回值为 DOUBLE 或数组。 |
参数说明:
-
expr:指定用于计算的表达式。
-
p:指定要计算百分位值的位置,取值范围为:
(0,1)
,即不包含 0 和 1,传入一组数值可同时计算多个分位数的近似值,格式为array(p1,p2…)
。 -
accuracy:该参数以内存为代价控制近似精度,值越高,产生的近似值越好,默认值为 10,000,当 expr 中的非重复值的数量小于本参数的值时,会返回一个精确的百分位值。
使用示例(非数组):
计算 transactions 表中,成交单价(price)的第一四分位数。
SELECT percentile_approx(price, 0.25, 10000) AS result FROM transactions;
复制
返回示例:
+---------+ | result | +---------+ | 6.12 | +---------+
复制
使用示例(数组):
计算 transactions 表中,成交单价(price)的第一四分位数和中位数。
SELECT percentile_approx(price, array(0.25, 0.5), 10000) AS result FROM transactions;
复制
返回示例:
+--------------+ | result | +--------------+ | [6.12,8.64] | +--------------+
复制
percentile_cont
函数语法 | 返回类型 | 描述 |
---|---|---|
|
DOUBLE |
返回一个连续的百分位数,该函数将按照给定的排序顺序计算指定百分位数的值。 |
参数说明:
-
<expr>:百分位数的值。取值范围为 [0, 1],表示所要计算的分位数,例如 0.5 表示中位数,0.25 表示第一四分位数。
-
<order_expr>:可选,指定排序的表达式(如列名),支持的排序方式为 ASC(升序,默认)或 DESC(降序)。
-
<partition_expr>:可选,指定参与分区的表达式。
使用示例:
在 transactions 表中,以连续的方式分别计算各交易类型(trans_type)的成交单价(price)的中位数。
SELECT trans_type, percentile_cont(0.5) WITHIN GROUP ( ORDER BY price ASC) OVER(PARTITION BY trans_type) AS median_price FROM transactions;
复制
返回示例:
+-------------+---------------+ | trans_type | median_price | +-------------+---------------+ | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | s | 8.08 | | b | 10.46 | | b | 10.46 | | b | 10.46 | | b | 10.46 | | b | 10.46 | | b | 10.46 | | b | 10.46 | | b | 10.46 | +-------------+---------------+
复制
percentile_disc
函数语法 | 返回类型 | 描述 |
---|---|---|
|
Double |
返回一个离散的百分位数,该函数返回一个最接近指定百分位数的实际数据值,返回类型与输入值类型一致。如果没有对应的数据值,就取大于该分布值的下一个值。 |
参数说明:
-
expr:百分位数的值。取值范围为 [0, 1],表示所要计算的分位数,例如 0.5 表示中位数,0.25 表示第一四分位数。
-
order_expr:可选,指定排序的表达式(如列名),支持的排序方式为 ASC(升序,默认)或 DESC(降序)。
-
partition_expr:可选,指定参与分区的表达式。
使用示例:
在 transactions 表中,以离散的方式分别计算各交易类型(trans_type)的成交单价(price)的中位数。
SELECT trans_type, percentile_disc(0.5) WITHIN GROUP ( ORDER BY price) OVER(PARTITION BY trans_type) AS median_price FROM transactions;
复制
返回示例:
+-------------+---------------+ | trans_type | median_price | +-------------+---------------+ | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | s | 7.52 | | b | 9.81 | | b | 9.81 | | b | 9.81 | | b | 9.81 | | b | 9.81 | | b | 9.81 | | b | 9.81 | | b | 9.81 | +-------------+---------------+
复制
quantile
函数语法 | 返回类型 | 描述 |
---|---|---|
quantile(int, order_expr) |
与源数据类型相同 |
将一组记录划分为多个大小大致相等的分区。 |
参数说明:
-
int:指定分位数分区数量。
-
order_expr:可选,指定排序的表达式(如列名),支持的排序方式为 ASC(升序,默认)或 DESC(降序)。
使用示例:
由于该函数属于 Teradata 方言,我们需要先设置服务器方言为 Teradata,同时为避免因建表方言不一致引发数据读取报错,我们还需要跳过查询时的方言检查,具体流程如下:
-- 设置方言为 Teradata set server.dialect=td; -- 跳过方言检查 set argodb.ignore.dialect.enabled=true; -- 使用 scum 函数 SELECT STR_TO_DATE(substr(trans_time, 1, 8),'yyyyMMdd') date, price, amount, quantile(10,amount) AS result FROM transactions;
复制
返回示例:
+-------------+--------+---------+---------+ | date | price | amount | result | +-------------+--------+---------+---------+ | 2014-02-28 | 9.16 | 100 | 0 | | 2014-06-28 | 7.02 | 100 | 0 | | 2014-05-06 | 6.12 | 100 | 0 | | 2014-03-28 | 68.43 | 100 | 0 | | 2014-03-15 | 22.66 | 200 | 2 | | 2014-01-05 | 12.13 | 200 | 2 | | 2014-06-11 | 5.3 | 200 | 2 | | 2014-02-05 | 11.11 | 300 | 3 | | 2014-03-14 | 10.31 | 400 | 4 | | 2014-10-31 | 12.21 | 500 | 4 | | 2014-09-16 | 9.81 | 500 | 4 | | 2014-02-14 | 4.16 | 600 | 5 | | 2014-05-08 | 18.38 | 700 | 6 | | 2014-03-31 | 10.03 | 800 | 6 | | 2014-08-01 | 6.36 | 800 | 6 | | 2014-11-30 | 8.64 | 900 | 7 | | 2014-04-30 | 5.25 | 1000 | 8 | | 2014-04-30 | 4.5 | 1000 | 8 | | 2014-12-25 | 7.49 | 1100 | 9 | | 2014-07-02 | 7.52 | 1300 | 9 | +-------------+--------+---------+---------+
复制
skew
函数语法 | 返回类型 | 描述 |
---|---|---|
skew(expr) |
DOUBLE |
计算一组数值的偏度值,用于衡量数据分布的对称性,对于含有 NULL 值的数据,将被忽略。正偏度表示尾部向右延伸的分布;负偏度表示尾部向左延伸的分布。 |
参数说明:
-
expr:指定要计算的表达式。
使用示例:
在 transactions 表中,计算成交单价(price)的偏度值。
SELECT skew(price) AS result FROM transactions;
复制
返回示例:
+--------------------+ | result | +--------------------+ | 3.758271312419232 | +--------------------+
复制
std/stddev/stddev_pop
函数语法 | 返回类型 | 描述 |
---|---|---|
std([DISTINCT] expr) stddev([DISTINCT] exrp) stddev_pop([DISTINCT] expr) |
DOUBLE |
返回表达式的总体标准差。 |
参数说明:
-
DISTINCT:是否在计算前去除重复值。
-
expr:指定用于统计的表达式,如果只有一个值则返回 0.0。
使用示例:
SELECT std(DISTINCT price) AS result FROM transactions;
复制
返回示例:
+---------------------+ | result | +---------------------+ | 13.616199717615782 | +---------------------+
复制
stddev_samp
函数语法 | 返回类型 | 描述 |
---|---|---|
stddev_samp([DISTINCT] expr) |
DOUBLE |
返回指定列的样本标准差。 |
参数说明:
-
DISTINCT:是否在计算前去除重复值。
-
expr:指定用于统计的表达式,如果只有一个值则返回 0.0。
使用示例:
SELECT stddev_samp(DISTINCT amount) AS result FROM transactions;
复制
返回示例:
+---------------------+ | result | +---------------------+ | 375.27767497325675 | +---------------------+
复制
sum
函数语法 | 返回类型 | 描述 |
---|---|---|
sum(expr) |
INTEGER |
返回表达式的求和结果。 |
参数说明:
-
expr:指定用于统计的表达式。
使用示例:
SELECT sum(amount) AS result FROM transactions;
复制
返回示例:
+---------+ | result | +---------+ | 10900 | +---------+
复制
variance/var_pop
函数语法 | 返回类型 | 描述 |
---|---|---|
|
DOUBLE |
返回表达式的总体方差。 |
参数说明:
-
DISTINCT:是否在计算前去除重复值。
-
expr:指定用于统计的表达式,如果只有一个值则返回 0.0。
使用示例:
SELECT variance(DISTINCT amount) AS result_variance, var_pop(amount) AS result_varpop FROM transactions;
复制
返回示例:
+---------------------+----------------+ | result_variance | result_varpop | +---------------------+----------------+ | 129097.22222222223 | 140475.0 | +---------------------+----------------+
复制
var_samp
函数语法 | 返回类型 | 描述 |
---|---|---|
var_samp(expr) |
DOUBLE |
返回表达式的样本方差。 |
参数说明:
-
expr:指定用于统计的表达式,如果只有一个值则返回 0.0。
使用示例:
SELECT var_samp(amount) AS result FROM transactions;
复制
返回示例:
+---------------------+ | result | +---------------------+ | 147868.42105263157 | +---------------------+
复制
wd_concat
函数语法 | 返回类型 | 描述 |
---|---|---|
wd_concat(expr) |
STRING |
将表达式中的字符串合并为一条记录。 |
参数说明:
-
expr:指定要合并字符串的表达式。
使用示例 1:
将用户信息表(user_info)中,账号等级(acc_level)列中的所有值合并为一条记录。
SELECT wd_concat(acc_level) AS result FROM user_info;
复制
返回示例 1:
+-------------+ | result | +-------------+ | CCEDAACDAB | +-------------+
复制
使用示例 2:
在 user_info 表中,按照账户等级(acc_level)分区,以注册日期(reg_date)降序的顺序拼接用户姓名(name)。
SELECT reg_date, acc_level, wd_concat(name) OVER ( PARTITION BY acc_level ORDER BY reg_date DESC ) "concat" FROM user_info;
复制
返回示例 2:
+-----------+------------+------------+ | reg_date | acc_level | concat | +-----------+------------+------------+ | 20121024 | A | 丘** | | 20110101 | A | 丘**马** | | 20091202 | A | 丘**马**魏** | | 20080214 | B | 华** | | 20141003 | C | 管** | | 20110430 | C | 管**潘** | | 20100101 | C | 管**潘**祝** | | 20110916 | D | 李** | | 20081031 | D | 李**宁** | | 20130702 | E | 李** | +-----------+------------+------------+
复制
xmlagg
函数语法 | 返回类型 | 描述 |
---|---|---|
xmlagg(expr) |
STRING |
获取一组 XML 片段并返回一个聚合的 XML 文档,输出结果时不会包含 XML 的元素标记。 |
参数说明:
-
expr:指定要聚合的表达式。
使用示例:
将用户信息表(user_info)中,账号等级(acc_level)列中的所有值合并为一条记录。
如需在输出结果带上 XML 元素标记,可在 xmlagg 中嵌套使用 xmlforest 函数,例如: |
SELECT xmlagg(acc_level) AS result FROM user_info;
复制
返回示例:
+-------------+ | result | +-------------+ | CDCCBADAAE | +-------------+
复制