描述一个postgresql中聚集函数array_agg、string_agg、bit_and、bit_or的应用场景
聚集函数从一个输入值的集合计算一个单一结果。
1.1 业务场景
业务场景如下图所示:
销售区域可以有多个渠道类型、多个负责部门、多个负责人销售区域 + 多个渠道类型 形成唯一值。(新增、编辑时需要做数据校验)
第一个问题就非常适合使用 string_agg() 函数。针对第二个问题,使用bit_and和bit_or 的和作为一个唯一标志。减少查询的复杂性
1.2 函数
除了count以外,这些函数在没有行被选中时返回空值。尤其是sum函数在没有输入行时返回空值,而不是零,并且array_agg在这种情况返回空值而不是一个空数组。必要时可以用coalesce把空值替换成零或一个空数组。
参考
sql的具体写法,可以参考中文文档,不做描述: 聚集函数 http://www.postgres.cn/docs/9.6/functions-aggregate.html