在MariaDB中将查询结果转换为逗号分隔的列表

发布于

在 MariaDB 中,我们可以使用该函数以逗号分隔的列表形式返回我们的查询结果。我的意思是,对于给定的列,我们可以将所有行转换为一行,其中包含构成该列的值的逗号分隔列表。每一行都是列表中的一个单独项目。GROUP_CONCAT()

示例

假设我们运行以下查询:

SELECT meal 
FROM guest_meals;

输出:

+---------+
| meal    |
+---------+
| Salad   |
| Fish    |
| Burrito |
| Pasta   |
| Salad   |
| Salad   |
+---------+
6 rows in set (0.001 sec)

该查询生成了六行。

我们可以将这些行转换为一个逗号分隔的行,如下所示:

SELECT GROUP_CONCAT(meal) 
FROM guest_meals;

输出:

+--------------------------------------+
| GROUP_CONCAT(meal)                   |
+--------------------------------------+
| Salad,Fish,Burrito,Pasta,Salad,Salad |
+--------------------------------------+
1 row in set (0.003 sec)

更改分隔符

我们可以通过将其传递给函数来指定我们自己的分隔符,并以关键字为前缀:SEPARATOR

SELECT GROUP_CONCAT(meal SEPARATOR ' + ') 
FROM guest_meals;

输出:

Salad + Fish + Burrito + Pasta + Salad + Salad

对结果进行排序

我们可以通过在函数中使用子句对结果进行排序:ORDER BY

SELECT GROUP_CONCAT(meal ORDER BY meal ASC) 
FROM guest_meals;

输出:

Burrito,Fish,Pasta,Salad,Salad,Salad

仅返回唯一值

我们可以使用子句只返回唯一值:DISTINCT

SELECT GROUP_CONCAT(DISTINCT meal ORDER BY meal ASC) 
FROM guest_meals;

输出:

Burrito,Fish,Pasta,Salad

限制结果

我们可以使用子句来限制列表中的项目数:LIMIT

SELECT GROUP_CONCAT(DISTINCT meal ORDER BY meal ASC LIMIT 3) 
FROM guest_meals;

输出:

Burrito,Fish,Pasta

分组查询

该函数在运行分组查询时非常方便。有关示例,请参阅 MariaDB GROUP_CONCAT()。GROUP_CONCAT()