MariaDB GROUP_CONCAT() 函数的基础用法与实例

MariaDB GROUP_CONCAT() 函数是一个聚合函数,它可以将同一分组中的多个值连接成一个字符串。

发布于

MariaDB GROUP_CONCAT() 函数是一个聚合函数,它可以将同一分组中的多个值连接成一个字符串。它常用于将多对多关系的数据展示为一对多的形式,或者将分组后的数据以逗号分隔的列表显示。

语法

MariaDB GROUP_CONCAT() 函数的基本语法如下:

GROUP_CONCAT([DISTINCT] expression [ORDER BY {unsigned_integer | col_name | expr}
    [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])

其中:

  • DISTINCT 是一个可选的关键字,用于去除重复的值。
  • expression 是一个列名,一个常量,或者一个函数,用于指定要连接的值。
  • ORDER BY 是一个可选的子句,用于指定连接前的排序方式。可以按照列的位置,列名,或者表达式进行排序,可以指定升序或降序,可以有多个排序条件。
  • SEPARATOR 是一个可选的子句,用于指定连接时使用的分隔符。默认的分隔符是逗号 (,)。如果指定的分隔符是空字符串 (''),则不使用任何分隔符。

实例

下面是一些使用 MariaDB GROUP_CONCAT() 函数的实例,以及相应的代码,说明,和输出结果。

基本用法

假设有一个表 students,存储了学生的姓名和班级,如下:

name class
Alice 1
Bob 1
Cathy 2
David 2
Eve 3
Frank 3

如果想要查询每个班级有哪些学生,可以使用 MariaDB GROUP_CONCAT() 函数,如下:

SELECT class, GROUP_CONCAT(name) AS students
FROM students
GROUP BY class;

输出结果如下:

| class | students      |
| ----- | ------------- |
| 1     | Alice,Bob     |
| 2     | Cathy,David   |
| 3     | Eve,Frank     |

这个实例展示了 MariaDB GROUP_CONCAT() 函数的基本用法,即将同一分组中的多个值连接成一个字符串,以逗号分隔。

使用 DISTINCT 关键字

假设有一个表 books,存储了书籍的名称和作者,如下:

title author
Pride and Prejudice Jane Austen
Emma Jane Austen
Sense and Sensibility Jane Austen
The Catcher in the Rye J.D. Salinger
Nineteen Eighty-Four George Orwell
Animal Farm George Orwell

如果想要查询有哪些作者,可以使用 MariaDB GROUP_CONCAT() 函数,如下:

SELECT GROUP_CONCAT(author) AS authors
FROM books;

输出结果如下:

| authors                                   |
| ----------------------------------------- |
| Jane Austen,Jane Austen,Jane Austen,J.D. Salinger,George Orwell,George Orwell |

这个实例展示了 MariaDB GROUP_CONCAT() 函数的一个缺点,即可能会出现重复的值。为了避免这种情况,可以使用 DISTINCT 关键字,如下:

SELECT GROUP_CONCAT(DISTINCT author) AS authors
FROM books;

输出结果如下:

Jane Austen,J.D. Salinger,George Orwell

这个实例展示了 MariaDB GROUP_CONCAT() 函数的一个优点,即可以使用 DISTINCT 关键字去除重复的值。

使用 ORDER BY 子句

假设有一个表 scores,存储了学生的姓名和成绩,如下:

name score
Alice 95
Bob 85
Cathy 90
David 80
Eve 75
Frank 70

如果想要查询所有学生的成绩,可以使用 MariaDB GROUP_CONCAT() 函数,如下:

SELECT GROUP_CONCAT(score) AS scores
FROM scores;

输出结果如下:

| scores            |
| ----------------- |
| 95,85,90,80,75,70 |

这个实例展示了 MariaDB GROUP_CONCAT() 函数的一个默认行为,即按照原始数据的顺序进行连接。如果想要按照成绩的高低进行排序,可以使用 ORDER BY 子句,如下:

SELECT GROUP_CONCAT(score ORDER BY score DESC) AS scores
FROM scores;

输出结果如下:

| scores            |
| ----------------- |
| 95,90,85,80,75,70 |

这个实例展示了 MariaDB GROUP_CONCAT() 函数的一个功能,即可以使用 ORDER BY 子句指定连接前的排序方式。可以按照列的位置,列名,或者表达式进行排序,可以指定升序或降序,可以有多个排序条件。

使用 SEPARATOR 子句

假设有一个表 fruits,存储了水果的名称和颜色,如下:

name color
apple red
banana yellow
cherry red
grape purple
lemon yellow
orange orange

如果想要查询有哪些颜色的水果,可以使用 MariaDB GROUP_CONCAT() 函数,如下:

SELECT color, GROUP_CONCAT(name) AS fruits
FROM fruits
GROUP BY color;

输出结果如下:

| color  | fruits       |
| ------ | ------------ |
| red    | apple,cherry |
| yellow | banana,lemon |
| purple | grape        |
| orange | orange       |

这个实例展示了 MariaDB GROUP_CONCAT() 函数的一个默认行为,即使用逗号作为分隔符。如果想要使用其他的分隔符,可以使用 SEPARATOR 子句,如下:

SELECT color, GROUP_CONCAT(name SEPARATOR ' and ') AS fruits
FROM fruits
GROUP BY color;

输出结果如下:

| color  | fruits            |
| ------ | ----------------- |
| red    | apple and cherry  |
| yellow | banana and lemon  |
| purple | grape             |
| orange | orange            |

这个实例展示了 MariaDB GROUP_CONCAT() 函数的一个功能,即可以使用 SEPARATOR 子句指定连接时使用的分隔符。可以使用任何字符串作为分隔符,甚至可以使用空字符串,表示不使用任何分隔符。

相关函数

MariaDB GROUP_CONCAT() 函数与以下函数有一定的关联:

  • CONCAT() 函数:用于将两个或多个字符串连接成一个字符串。
  • CONCAT_WS() 函数:用于使用指定的分隔符将两个或多个字符串连接成一个字符串。

结论

MariaDB GROUP_CONCAT() 函数是一个有用的聚合函数,它可以将同一分组中的多个值连接成一个字符串。它可以通过 DISTINCTORDER BY,和 SEPARATOR 子句来调整连接的方式,以满足不同的需求。它常用于将多对多关系的数据展示为一对多的形式,或者将分组后的数据以逗号分隔的列表