SQL字符串聚合函数

如果您曾经使用过SQL数据库,那么您可能熟悉聚合函数。它们本质上是对一组值执行计算并返回单个结果的一组函数。

一个例子包括SUM()、AVG()、COUNT()、MAX和MIN()等函数。然而,关于SQL中的聚合函数,您会注意到一件事,那就是它们是面向数值运算的。

但是你知道有处理字符串值的聚合函数吗?在本教程中,我们将介绍这些函数,它们是如何工作的,以及如何在数据库中使用它们。

注意:值得注意的是,本文中讨论的大多数函数都不是标准SQL的一部分。因此,它们是各种数据库引擎(如PostgreSQL、SQL Server等)的扩展。

什么是字符串聚合函数?

字符串聚合函数是对组或行中的一组字符串执行聚合操作并返回单个结果的一组函数。

我们主要将这些函数与GROUP BY子句一起使用,根据某一列对行进行分组,然后对每组中的字符串进行聚合。

一些常见的字符串聚合函数包括:

  • GROUP_CONCAT() - PostgreSQL和MySQL
  • STRING_AGG - SQL Server
  • ARRAY_AGG - PostgreSQL
  • LISTAGG - Oracle

让我们来研究一下每个函数及其提供的功能。

GROUP_CONCAT ()

PostgreSQL和MySQL数据库支持GROUP_CONCAT()函数。它允许我们将多行中的值连接到一个字符串中。

假设我们有一个“雇员”表如下:

创建表employees

INT AUTO_INCREMENT主键,

first_name VARCHAR (50),

last_name VARCHAR (50),

部门VARCHAR (50)

);

INSERT INTO employees (first_name, last_name, department) VALUES

(《爱丽丝》《史密斯》《人力资源》),

(“鲍勃”、“约翰逊”、“市场部”),

(《查理》、《威尔逊》、《金融》),

(“David”,“Brown”,“Sales”),

('Eva', 'Davis', 'Engineering');

输出:

如果我们想通过取名字并与姓氏连接来确定雇员的全名,我们可以使用GROUP_CONCAT()函数,如下面的示例所示:

选择

部门,

GROUP_CONCAT(first_name, ' ', last_name) AS full_name



员工

集团

部门;

在本例中,我们使用该函数连接“first_name”和“last_name”列中的字符串,并使用空字符串在名称中添加一个空格。

它包含每个部门的员工列表。

STRING_AGG

此函数类似于GROUP_CONCAT()函数,但仅在SQL Server数据库中支持。

示例用法如下:

选择

部门,

STRING_AGG(first_name, last_name, ' ')作为full_name



员工

集团

部门;

这将在指定列上执行字符串连接,将空格用作分隔符。

ARRAY_AGG

ARRAY_AGG函数仅在PostgreSQL数据库中可用。它允许我们将值聚合到单个数组中。

示例如下:

选择

部门,

ARRAY_AGG(first_name)作为employees_list



员工

集团

部门;

这应该将员工名聚合为一个数组。

LISTAGG ()

LISTAGG()函数仅在Oracle数据库中可用。它允许我们用指定的分隔符将值连接到单个字符串中。

示例如下:

SELECT department, LISTAGG(first_name, last_name, ' ') WITHIN GROUP (ORDER BY employee_name ASC)作为employees

从员工

按部门分组;

这将员工的姓名与指定的分隔符连接起来。

结论

在本教程中,我们学习了字符串聚合函数,它允许我们提供字符串值列表并对单个结果字符串值执行操作。