SQL编程思想:基于5种主流数据库代码实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


4.1.7 使用LISTAGG函数连接字符串

LISTAGG函数用于对字符串进行聚合,可以将多行字符串合并成单个字符串。例如,以下查询返回了行政管理部门中所有员工的电子邮箱:

目前只有Oracle实现了该函数,函数中的第二个参数用于指定连接字符串的分隔符,默认为空。查询返回的结果如下:

LISTAGG函数支持WITHIN GROUP选项,可以在合并之前对数据进行排序,例如:

其中ORDER BY表示对邮箱地址进行排序。查询返回的结果如下:

MySQL提供了执行字符串聚合操作的GROUP_CONCAT函数,例如:

其中,ORDER BY表示对邮箱地址进行排序,SEPARATOR指定了连接字符串的分隔符,默认为逗号。查询返回的结果和上面的示例相同。

SQLite提供了和MySQL类似的GROUP_CONCAT函数,但是调用参数不同,例如:

第2个参数指定了连接字符串的分隔符,默认为逗号。SQLite中的GROUP_CONCAT函数不支持数据排序,查询返回的结果和上面的第1个Oracle示例相同。

Microsoft SQL Server提供了执行字符串聚合操作的STRING_AGG函数,例如:

第2个参数指定了连接字符串的分隔符,WITHIN GROUP选项用于在合并之前对数据进行排序。查询返回的结果和上面的第2个Oracle示例相同。

PostgreSQL提供了和Microsoft SQL Server类似的STRING_AGG函数,但是调用参数不同,例如:

第2个参数同时指定了连接字符串的分隔符和数据的排序。查询返回的结果和上面的第2个Oracle示例相同。

以上字符串聚合函数都可以使用DISTINCT关键字在合并之前排除重复数据,同时还会忽略数据中的NULL值。