
# 聚合函数
#### hll_add_agg(hll_hashval)
描述：把哈希后的数据按照分组放到hll中。
返回值类型：hll
示例：
```
--准备数据
gaussdb=# CREATE TABLE t_id(id int);
gaussdb=# INSERT INTO t_id VALUES(generate_series(1,500));
gaussdb=# CREATE TABLE t_data(a int, c text);
gaussdb=# INSERT INTO t_data SELECT mod(id,2), id FROM t_id;
--创建表并指定列为hll
gaussdb=# CREATE TABLE t_a_c_hll(a int, c hll);
--根据a列group by对数据分组，把各组数据加到hll中
gaussdb=# INSERT INTO t_a_c_hll SELECT a, hll_add_agg(hll_hash_text(c)) FROM t_data GROUP BY a;
--得到每组数据中hll的Distinct值
gaussdb=# SELECT a, #c AS cardinality FROM t_a_c_hll ORDER BY a;
 a |   cardinality    
---+------------------
 0 | 247.862354346299
 1 | 250.908710610377
(2 rows)
```
#### hll_add_agg(hll_hashval, int32 log2m)
描述：把哈希后的数据按照分组放到hll中， 并指定参数log2m，取值范围是10到16。若输入-1或者NULL，则采用内置默认值。
返回值类型：hll
示例：
```
gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), 12)) FROM t_data;
 hll_cardinality  
------------------
 497.965240179228
(1 row)
```
#### hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit)
描述：把哈希后的数据按照分组放到hll中，依次指定参数log2m、log2explicit。 log2explicit取值范围是0到12，0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小，在数据段长度达到2^log2explicit^后切换为Sparse模式或者Full模式。若输入-1或者NULL，则log2explicit采用内置默认值。
返回值类型：hll
示例：
```
gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) FROM t_data;
 hll_cardinality  
------------------
 498.496062953313
(1 row)
```
#### hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse)
描述：把哈希后的数据按照分组放到hll中， 依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14，0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小，在数据段长度达到2^log2sparse^后切换为Full模式。若输入-1或者NULL，则log2sparse采用内置默认值。
返回值类型：hll
示例：
```
gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10)) FROM t_data;
 hll_cardinality  
------------------
 498.496062953313
(1 row)
```
#### hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck)
描述：把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse、duplicatecheck，duplicatecheck取值范围是0或者1，表示是否开启该模式，默认情况下该模式会关闭。若输入-1或者NULL，则duplicatecheck采用内置默认值。
返回值类型：hll
示例：
```
gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10, -1)) FROM t_data;
 hll_cardinality  
------------------
 498.496062953313
(1 row)
```
#### hll_union_agg(hll)
描述：将多个hll类型数据union成一个hll。
返回值类型：hll
示例：
```
--将各组中的hll数据union成一个hll，并计算distinct值。
gaussdb=# SELECT #hll_union_agg(c) AS cardinality FROM t_a_c_hll;
   cardinality    
------------------
 498.496062953313
(1 row)
--删除表
gaussdb=# DROP TABLE t_id;
gaussdb=# DROP TABLE t_data;
gaussdb=# DROP TABLE t_a_c_hll;
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
注意：当两个或者多个hll数据结构做union的时候，必须要保证其中每一个hll里面的精度参数一样，否则将不可以进行union。同样的约束也适用于函数hll_union(hll,hll)。
