Hologres兼容PostgreSQL,支持使用标准的PostgreSQL语法进行开发,本文为您介绍Hologres已支持的通用聚合函数。
当前Hologres版本支持的函数是PostgreSQL的一个子集,函数的使用方法请参见通用聚合函数。 Hologres已支持的通用聚合函数列表如下。
| 函数 | 功能 | 
| 计算某一列去重后的行数,结果只能返回一个值,并且该值为近似值。 | |
| 计算近似数值列的百分位值。 说明  Hologres 从 3.1 版本开始支持 APPROX_PERCENTILE。 | |
| 将表达式的值串联到数组中。 | |
| 计算BIGINT、FLOAT8、FLOAT4或INT类型表达式中非空值的平均值。 | |
| 在BIGINT或INT类型的表达式中,对非空值进行按位与运算。 | |
| 对BIGINT或INT类型表达式中的非空值进行按位或运算。 | |
| 计算BOOLEAN类型表达式中值是否均为TRUE。 | |
| 计算BOOLEAN类型表达式中值是否包含TRUE。 | |
| 计算两个变量之间的相关系数。 | |
| 获取指定表的行数或BIGINT、NUMERIC类型表达式的输入行数。 | |
| 计算总体协方差。 | |
| 计算样本协方差。 | |
| 判断BOOLEAN表达式的值是否均为TRUE。 | |
| 获取BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式的最大值。 | |
| 用于比较某一列(y列)的最大值,并获取y列最大值对应其他指定列(x列)的值。 | |
| 获取BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式的最小值。 | |
| 用于比较某一列(y列)的最小值,并获取y列最小值对应其他指定列(x列)的值。 | |
| 计算自变量(X)的平均值。 | |
| 计算因变量(Y)的平均值。 | |
| 计算输入参数中都不为空的行数。 | |
| 计算相关系数的平方。 | |
| 计算由 | |
| 计算最小方差拟合的斜率。 | |
| 计算自变量(X)的平方和,即 | |
| 计算自变量(X)和因变量(Y)的乘积和,即 | |
| 获取BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式所有值的总和。 | |
| 计算INT、NUMERIC或FLOAT8类型表达式的样本标准差。 | |
| 计算INT、NUMERIC或FLOAT8类型表达式的总体标准差。 | |
| 计算INT、NUMERIC、FLOAT8类型表达式的样本标准差。 | |
| 将TEXT类型表达式中的非空值使用指定分隔符串联成字符串。 | |
| 用于计算某一列去重后的行数。 | |
| 计算INT、NUMERIC类型表达式的样本方差。 | |
| 计算FLOAT8、INT或NUMERIC类型表达式的总体方差。 | |
| 计算INT、FLOAT8或NUMERIC类型表达式的样本方差。 | 
示例数据
-- 创建表
CREATE TABLE example_table(
    c1 INT,           
    c2 BOOLEAN,      
    c3 VARCHAR(10),  
    c4 DECIMAL(3, 1),
    c5 TEXT,
    c6 FLOAT8,
    c7 FLOAT8
);
-- 插入数据
INSERT INTO example_table (c1, c2, c3, c4, c5, c6, C7) VALUES
(1, true, 'a', 1.1, 3, 6, 7),
(2, false, 'b', 2.2, 4, 6, 2.6);APPROX_COUNT_DISTINCT
- 描述:计算某一列去重后的行数,结果只能返回一个值,并且该值为近似值。 - APPROX_COUNT_DISTINCT ( <column> )
- 参数说明 - column:必填,需要近似计算去重后行数的列。 
- 使用说明 - APPROX_COUNT_DISTINCT函数采用HyperLogLog基数估计的方式进行非精确的COUNT DISTINCT计算。非精确的COUNT DISTINCT计算能提升查询性能,尤其是对于column的离散值比较大的情况,误差率平均可以控制在- 0.1%~1%以内,适用于对性能敏感并且可以接受误差的场景。您可通过以下参数,调整误差率。- SET hg_experimental_approx_count_distinct_precision = 20;- 支持取值范围为[12,20],默认值为17。 
- 精度参数含义为HyperLogLog算法的分桶bit位个数,参数越大,代表分桶越多,理论精度越高。 
- 精度参数取值越高,计算时间和内存开销也会相应增大,但都远远小于精确的 - COUNT DISTINCT ( column )语句带来的开销,因此,推荐选用- APPROX_COUNT_DISTINCT替换- COUNT DISTINCT ( column )。
- 当精度参数设置为17以上时,Hologres采用HyperLogLog++算法,会对返回值做误差修正,以进一步降低误差、稳定误差。 - 例如:hg_experimental_approx_count_distinct_precision取值为20时,多数情况下,可以降低到0.01~0.2%不等的误差率。 
 说明- 您还可通过 - COUNT DISTINCT ( column )的方式进行精确的COUNT DISTINCT计算,使用时资源开销会比较大。
- 示例 - 以下示例使用MaxCompute提供的公开数据集TPC-H的ORDERS表。您无需进行任何额外准备,只需运行以下SQL语句。 - -- 创建外部表 IMPORT FOREIGN SCHEMA public_data LIMIT TO (ORDERS_10g) FROM SERVER odps_server INTO public options (if_table_exist 'update'); -- 创建内部表 BEGIN; CREATE TABLE ORDERS ( O_ORDERKEY bigint NOT NULL PRIMARY KEY, O_CUSTKEY int NOT NULL, O_ORDERSTATUS text NOT NULL, O_TOTALPRICE DECIMAL(12, 2) NOT NULL, O_ORDERDATE timestamptz NOT NULL, O_ORDERPRIORITY text NOT NULL, O_CLERK text NOT NULL, O_SHIPPRIORITY int NOT NULL, O_COMMENT text NOT NULL ); CALL set_table_property ('ORDERS', 'segment_key', 'O_ORDERDATE'); CALL set_table_property ('ORDERS', 'distribution_key', 'O_ORDERKEY'); CALL set_table_property ('ORDERS', 'bitmap_columns', 'O_ORDERKEY,O_CUSTKEY,O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY,O_COMMENT'); CALL set_table_property ('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_COMMENT'); COMMENT ON COLUMN ORDERS.O_ORDERKEY IS '订单编号'; COMMENT ON COLUMN ORDERS.O_CUSTKEY IS '顾客序号'; COMMENT ON COLUMN ORDERS.O_ORDERSTATUS IS '订单状态'; COMMENT ON COLUMN ORDERS.O_TOTALPRICE IS '总价'; COMMENT ON COLUMN ORDERS.O_ORDERDATE IS '下单日期'; COMMENT ON COLUMN ORDERS.O_ORDERPRIORITY IS '订单优先级'; COMMENT ON COLUMN ORDERS.O_CLERK IS '收银员'; COMMENT ON COLUMN ORDERS.O_SHIPPRIORITY IS '发货优先级'; COMMENT ON COLUMN ORDERS.O_COMMENT IS '备注'; COMMIT; -- 数据导入内表 INSERT INTO ORDERS SELECT * FROM ORDERS_10g;- 计算O_CUSTKEY列去重后行数的近似值。 - SELECT APPROX_COUNT_DISTINCT ( O_CUSTKEY ) FROM ORDERS;- 返回结果如下。 - approx_count_distinct ----------------------- 1000422
- 全局设置精度为20,计算O_CUSTKEY列去重后行数的近似值。 - ALTER DATABASE dbname SET hg_experimental_approx_count_distinct_precision = 20; SELECT APPROX_COUNT_DISTINCT ( O_CUSTKEY ) FROM ORDERS;- 返回结果如下。 - approx_count_distinct ----------------------- 1000422
- Session级别设置精度为20,计算O_CUSTKEY列去重后行数的近似值。 - --在Session级别设置精度20 SET hg_experimental_approx_count_distinct_precision = 20; SELECT APPROX_COUNT_DISTINCT ( O_CUSTKEY ) FROM ORDERS;- 返回结果如下。 - approx_count_distinct ----------------------- 998854
 
APPROX_PERCENTILE
Hologres 从 3.1 版本开始支持 APPROX_PERCENTILE。
- 描述:计算近似数值列的百分位值,结果返回一个值,并且该值为近似值。 - APPROX_PERCENTILE (fraction) WITHIN GROUP (ORDER BY sort_expression)
- 参数说明 - fraction:介于 0 到 1 之间的常量(如 0.5 表示中位数)。 
- sort_expression:要计算百分位的列,必须可排序。 
 
- 使用说明 - APPROX_PERCENTILE函数采用蓄水池采样算法,最多采8192个元素,然后对这些样本计算百分位。
- 示例 - 计算O_CUSTKEY列去重后行数的近似值,示例语句如下。 - SELECT APPROX_PERCENTILE(0.25) WITHIN GROUP (ORDER BY salary) AS q1, APPROX_PERCENTILE(0.5) WITHIN GROUP (ORDER BY salary) AS median, APPROX_PERCENTILE(0.75) WITHIN GROUP (ORDER BY salary) AS q3 FROM employees;
ARRAY_AGG
- 描述:将表达式的值串联到数组中。 - ARRAY_AGG(expression)
- 参数说明 - expression:必填,除JSON、JSONB、TIMETZ、INTERVAL、INET、OID、UUID数据类型和数组类型之外的,其他格式的表达式。 
- 返回值说明 - 返回ARRAY类型。 
- 示例 - SELECT ARRAY_AGG(c1) FROM example_table;- 返回结果如下。 - array_agg ----------- {2,1}
AVG
- 描述:计算BIGINT、FLOAT8、FLOAT4或INT类型表达式中非空值的平均值。 - AVG(expression)
- 参数说明 - expression:必填,BIGINT、FLOAT8、FLOAT4或INT类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT AVG(c7) FROM example_table;- 返回结果如下。 - avg ---------- 1.500000
BIT_AND
- 描述:在BIGINT或INT类型的表达式中,对非空值进行按位与运算。 - BIT_AND(expression)
- 参数说明 - expression:必填,BIGINT或INT类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT BIT_AND(c1) FROM example_table;- 返回结果如下。 - bit_and --------- 0
BIT_OR
- 描述:对BIGINT或INT类型表达式中的非空值进行按位或运算。 - BIT_OR(expression)
- 参数说明 - expression:必填,BIGINT或INT类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT BIT_OR(c1) FROM example_table;- 返回结果如下。 - bit_or -------- 3
BOOL_AND
- 描述:计算BOOLEAN类型表达式中值是否均为TRUE。 - BOOL_AND(bool)
- 参数说明 - bool:必填,BOOLEAN类型表达式。 
- 返回值说明 - 返回BOOLEAN类型,若表达式中值均为TRUE,则返回TRUE(t),否则返回FALSE(f)。 
- 示例 - SELECT BOOL_AND(c2) FROM example_table;- 返回结果如下。 - bool_and ---------- f
BOOL_OR
- 描述:计算BOOLEAN类型表达式中值是否包含TRUE。 - BOOL_OR(bool)
- 参数说明 - bool:必填,BOOLEAN类型表达式。 
- 返回值说明 - 返回BOOLEAN类型,若表达式中值包含TRUE,则返回TRUE(t),否则返回FALSE(f)。 
- 示例 - SELECT BOOL_OR(c2) FROM example_table;- 返回结果如下。 - bool_or --------- t
CORR
- 描述:计算两个变量之间的相关系数。 - CORR(Y, X)说明- 参数类型仅支持DOUBLE PRECISION、FLOAT或FLOAT8类型。 
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT CORR(c6, c7) FROM example_table;- 返回结果如下。 - corr ------
COUNT
- 描述:获取指定表的行数或BIGINT、NUMERIC类型表达式的输入行数。 - 获取指定表的行数 - COUNT(*)
- 获取BIGINT、NUMERIC类型表达式的输入行数 - COUNT(expression)- 参数说明:必填,BIGINT、NUMERIC类型的表达式值不为NULL。 
 
- 返回值说明 - 返回BIGINT类型。 
- 示例 - SELECT COUNT(*) FROM example_table;- 返回结果如下。 - count ------- 2
COVAR_POP
- 描述:计算总体协方差。 - COVAR_POP(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT COVAR_POP(c6, c7) FROM example_table;- 返回结果如下。 - covar_pop --------------------- 3.5527136788005e-15
COVAR_SAMP
- 描述:计算样本协方差。 - COVAR_SAMP(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT COVAR_SAMP(c6, c7) FROM example_table;- 返回结果如下。 - covar_samp -------------------- 7.105427357601e-15
EVERY
- 描述:判断BOOLEAN表达式的值是否均为TRUE。 - EVERY(bool)
- 参数说明 - bool:必填,BOOLEAN类型表达式。 
- 返回值说明 - 返回BOOLEAN类型,若表达式的值均为TRUE,则返回TRUE(t),否则返回FALSE(f)。 
- 示例 - SELECT EVERY(c2) FROM example_table;- 返回结果 - every ------- f
MAX
- 描述:获取BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式的最大值。 - MAX(expression)
- 参数说明 - expression:必填,BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT MAX(c1) FROM example_table;- 返回结果如下。 - max ----- 2
MAX_BY
- 描述:用于比较某一列(y列)的最大值,并获取y列最大值对应其他指定列(x列)的值。 - MAX_BY(x, y);说明- 数字类型按数字大小进行比较,非数字类型按照字典排序进行比较。 
- 参数说明 - y:必填,需要获取最大值的列名称。若y列存在NULL值,则该列将不参与计算。 
- x:必填,y列最大值时,需获取其他列值的列名称。 
 
- 使用说明 - 仅Hologres V1.3.36及以上版本的实例支持使用MAX_BY函数。 说明- 若实例低于该版本,请您通过加入实时数仓Hologres交流群申请升级实例,详情请参见如何获取更多的在线支持? 
- 返回值说明 - 当y列取值为最大值时,返回对应x列的值。 
- 当y列所有值均为NULL时,函数返回值为NULL。 
- 当MAX_BY函数中y列的最大值存在多个时,则返回对应的多个x值中的最大值。 
 
- 示例 - --示例数据 DROP TABLE IF EXISTS test; CREATE TABLE IF NOT EXISTS test ( id INT, name TEXT, cost INT ); INSERT INTO test VALUES (1, 'a', 100), (1, 'aa', 200), (1, 'aaa', 300), (2, 'b', 150), (2, 'bb', 300), (3, 'c', 150), (3, 'cc', 50);- 查询cost列最大值(存在多个)对应name列的值。 - SELECT max_by(name, cost) FROM test;- 返回结果如下。 - max_by -------- aaa
MIN
- 描述:获取BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式的最小值。 - MIN(expression)
- 参数说明 - expression:必填,BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型。 
- 返回值类型 - 与参数类型一致。 
- 示例 - SELECT MIN(c1) FROM example_table;- 返回结果如下。 - min ----- 1
MIN_BY
- 描述:用于比较某一列(y列)的最小值,并获取y列最小值对应其他指定列(x列)的值。 - MIN_BY(x, y);说明- 数字类型按数字大小进行比较,非数字类型按照字典排序进行比较。 
- 参数说明 - y:必填,需要获取最小值的列名称。若y列存在NULL值,则该列将不参与计算。 
- x:必填,y列最小值时,需获取其他列值的列名称。 
 
- 使用说明 - 仅Hologres V1.3.36及以上版本的实例支持使用MAX_BY与MIN_BY函数。 说明- 若实例低于该版本,请您通过加入实时数仓Hologres交流群申请升级实例,详情请参见如何获取更多的在线支持? 
- 返回值说明 - 当y列取值为最小值时,返回对应x列的值。 
- 当y列所有值均为NULL时,函数返回值为NULL。 
- 当MIN_BY函数中y列的最小值存在多个时,则返回对应的多个x值中的最小值。 
 
- 示例 - --示例数据 DROP TABLE IF EXISTS test; CREATE TABLE IF NOT EXISTS test ( id INT, name TEXT, cost INT ); INSERT INTO test VALUES (1, 'a', 100), (1, 'aa', 200), (1, 'aaa', 300), (2, 'b', 150), (2, 'bb', 300), (3, 'c', 150), (3, 'cc', 50);- 查询cost列最小值对应的name列的值。 - SELECT MIN_BY(name, cost) FROM test;- 返回结果如下。 - min_by -------- cc (1 row)
REGR_AVGX
- 描述:计算自变量(X)的平均值。 - REGR_AVGX(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT REGR_AVGX(c6, c7) FROM example_table;- 返回结果如下。 - regr_avgx ----------- 4.8
REGR_AVGY
- 描述:计算因变量(Y)的平均值。 - REGR_AVGY(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT REGR_AVGY(c6, c7) FROM example_table;- 返回结果如下。 - regr_avgy ----------- 6
REGR_COUNT
- 描述:计算输入参数中都不为空的行数。 - REGR_COUNT(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 返回BIGINT类型。 
- 示例 - SELECT REGR_COUNT(c6, c7) FROM example_table;- 返回结果如下。 - regr_count ------------ 2
REGR_R2
- 描述:计算相关系数的平方。 - REGR_R2(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT REGR_R2(c6, c7) FROM example_table;- 返回结果如下。 - regr_r2 --------- 1
REGR_INTERCEPT
- 描述:计算由 - (Y, X)确定的最小方差拟合的纵轴截距。- REGR_INTERCEPT(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT REGR_INTERCEPT(c6, c7) FROM example_table;- 返回结果如下。 - regr_intercept ---------------- 6
REGR_SLOPE
- 描述:计算最小方差拟合的斜率。 - REGR_SLOPE(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT REGR_SLOPE(c6, c7) FROM example_table;- 返回结果如下。 - regr_slope ---------------------- 7.34031751818285e-16
REGR_SXX
- 描述:计算自变量(X)的平方和,即 - sum(X^2) - sum(X)^2/N。- REGR_SXX(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT REGR_SXX(c6, c7) FROM example_table;- 返回结果如下。 - regr_sxx ---------- 9.68
REGR_SXY
- 描述:计算自变量(X)和因变量(Y)的乘积和,即 - sum(X*Y) - sum(X) * sum(Y)/N。- REGR_SXY(Y, X)
- 参数说明 - Y和X:必填,DOUBLE PRECISION、FLOAT或FLOAT8类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT REGR_SXY(c6, c7) FROM example_table;- 返回结果如下。 - regr_sxy -------------------- 7.105427357601e-15
SUM
- 描述:获取BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式所有值的总和。 - SUM(expression)
- 参数说明 - expression:必填,BIGINT、FLOAT8、FLOAT4、INT或NUMERIC类型表达式。 
- 返回值说明 - 与参数类型一致。 
- 示例 - SELECT SUM(c1) FROM example_table;- 返回结果如下。 - sum ----- 3
STDDEV
- 描述:计算INT、NUMERIC或FLOAT8类型表达式的样本标准差。 - STDDEV(expression)
- 参数说明 - expression:必填,INT、NUMERIC或FLOAT8类型表达式。 
- 返回值说明 - 返回NUMERIC或FLOAT8类型。 
- 示例 - SELECT STDDEV(c1) FROM example_table;- 返回结果如下。 - stddev -------------- 0.7071067811
STDDEV_POP
- 描述:计算INT、NUMERIC或FLOAT8类型表达式的总体标准差。 - STDDEV_POP(expression)
- 参数说明 - expression:必填,INT、NUMERIC或FLOAT8类型表达式。 
- 返回值说明 - 返回NUMERIC或FLOAT8类型。 
- 示例 - SELECT STDDEV_POP(c1) FROM example_table;- 返回结果如下。 - stddev_pop -------------- 0.5000000000
STDDEV_SAMP
- 描述:计算INT、NUMERIC、FLOAT8类型表达式的样本标准差。 - STDDEV_SAMP(expression)
- 参数说明 - expression:必填,INT、NUMERIC、FLOAT8类型表达式。 
- 返回值说明 - 返回NUMERIC或FLOAT8类型。 
- 示例 - SELECT STDDEV_SAMP(c1) FROM example_table;- 返回结果如下。 - stddev_samp -------------- 0.7071067812
STRING_AGG
- 描述:将TEXT类型表达式中的非空值使用指定分隔符串联成字符串。 - STRING_AGG(<expression> TEXT, <delimiter> TEXT)
- 参数说明 - expression:必填,原始字符串。 
- delimiter:必填,分隔符。 
 
- 返回值说明 - 返回TEXT类型。 
- 示例 - SELECT STRING_AGG(c5, '-') FROM example_table;- 返回结果如下。 - string_agg ------------ 3-4
UNIQ
- 描述:用于计算某一列去重后的行数。 - UNIQ ( < column > );
- 参数说明 - column:必填,需要计算去重后行数的列。支持SMALLINT、INTEGER、BIGINT、REAL、DOUBLE PRECISION、TEXT、VARCHAR、TIMESTAMP、TIMESTAMPTZ、DATE、TIMETZ、UUID类型。 
- 使用说明 - 仅Hologres V1.3及以上版本支持使用UNIQ函数。 说明- 如果您的实例是V1.3以下版本,请您使用常见升级准备失败报错或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。 
- SQL中必须包含GROUP BY,且GROUP BY的字段比较均匀(不倾斜),UNIQ才能发挥比COUNT DISTINCT更好的性能。 
- 正常情况下,UNIQ在GROUP BY KEY的KEY基数较高时,比COUNT DISTINCT性能更好,同时UNIQ比COUNT DISTINCT更节省内存,如果使用COUNT DISTINCT遇到内存超限时,可以换用UNIQ。 
- 从Hologres V2.1版本开始,Hologres针对COUNT DISTINCT场景做了非常多的性能优化(包括单个COUNT DISTINCT、多个COUNT DISTINCT、数据倾斜、SQL没有GROUP BY字段等场景),无需再手动改写成UNIQ实现,即可实现更好的性能。详情请参见Count Distinct优化。 
 
- 示例 - 以下示例使用MaxCompute提供的公开数据集TPC-H的ORDERS表。您无需进行任何额外准备,只需运行以下SQL语句。 - -- 创建外部表 IMPORT FOREIGN SCHEMA public_data LIMIT TO (ORDERS_10g) FROM SERVER odps_server INTO public options (if_table_exist 'update'); -- 创建内部表 BEGIN; CREATE TABLE ORDERS ( O_ORDERKEY bigint NOT NULL PRIMARY KEY, O_CUSTKEY int NOT NULL, O_ORDERSTATUS text NOT NULL, O_TOTALPRICE DECIMAL(12, 2) NOT NULL, O_ORDERDATE timestamptz NOT NULL, O_ORDERPRIORITY text NOT NULL, O_CLERK text NOT NULL, O_SHIPPRIORITY int NOT NULL, O_COMMENT text NOT NULL ); CALL set_table_property ('ORDERS', 'segment_key', 'O_ORDERDATE'); CALL set_table_property ('ORDERS', 'distribution_key', 'O_ORDERKEY'); CALL set_table_property ('ORDERS', 'bitmap_columns', 'O_ORDERKEY,O_CUSTKEY,O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY,O_COMMENT'); CALL set_table_property ('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_COMMENT'); COMMENT ON COLUMN ORDERS.O_ORDERKEY IS '订单编号'; COMMENT ON COLUMN ORDERS.O_CUSTKEY IS '顾客序号'; COMMENT ON COLUMN ORDERS.O_ORDERSTATUS IS '订单状态'; COMMENT ON COLUMN ORDERS.O_TOTALPRICE IS '总价'; COMMENT ON COLUMN ORDERS.O_ORDERDATE IS '下单日期'; COMMENT ON COLUMN ORDERS.O_ORDERPRIORITY IS '订单优先级'; COMMENT ON COLUMN ORDERS.O_CLERK IS '收银员'; COMMENT ON COLUMN ORDERS.O_SHIPPRIORITY IS '发货优先级'; COMMENT ON COLUMN ORDERS.O_COMMENT IS '备注'; COMMIT; -- 数据导入内表 INSERT INTO ORDERS SELECT * FROM ORDERS_10g;- 计算ORDERS表的O_CUSTKEY列去重后行数。 - SELECT UNIQ ( O_CUSTKEY ) FROM ORDERS;- 返回结果如下。 - uniq -------- 999982
- 计算ORDERS表的O_CUSTKEY列,不同O_ORDERSTATUS下O_CUSTKEY去重后行数。 - SELECT O_ORDERSTATUS, UNIQ ( O_CUSTKEY ) FROM ORDERS GROUP BY O_ORDERSTATUS;- 返回结果如下。 - o_orderstatus | uniq ---------------+-------- P | 313478 F | 996258 O | 996400
 
VARIANCE
- 描述:计算INT、NUMERIC类型表达式的样本方差。 - VARIANCE(expression)
- 参数说明 - expression:必填,INT、NUMERIC类型表达式。 
- 返回值说明 - 返回NUMERIC类型。 
- 示例 - SELECT VARIANCE(c1) FROM example_table;- 返回结果如下。 - variance -------------- 0.5000000000
VAR_POP
- 描述:计算FLOAT8、INT或NUMERIC类型表达式的总体方差。 - VAR_POP(expression)
- 参数说明 - expression:必填,FLOAT8、INT或NUMERIC类型表达式。 
- 返回值说明 - 返回NUMERIC或FLOAT8类型。 
- 示例 - SELECT VAR_POP(c1) FROM example_table;- 返回结果如下。 - var_pop -------------- 0.2500000000
VAR_SAMP
- 描述:计算INT、FLOAT8或NUMERIC类型表达式的样本方差。 - VAR_SAMP(expression)
- 参数说明 - expression:必填,INT、FLOAT8或NUMERIC类型表达式。 
- 返回值说明 - 返回NUMERIC或FLOAT8类型。 
- 示例 - SELECT VAR_SAMP(c1) FROM example_table;- 返回结果如下。 - var_samp -------------- 0.5000000000