SQLite group_concat() 函数

SQLite group_concat() 函数是一个聚合函数,它返回一个包含了分组中的所有的值的字符串(通过逗号分隔)。

group_concat() 语法

这里是 SQLite group_concat() 的语法:

group_concat(expr)

我们通常在 SQLite 中按如下方式使用 group_concat() 函数:

SELECT group_concat(expr), ...
FROM table_name
[WHERE ...]
[GROUP BY group_expr1, group_expr2, ...];

参数

expr
必需的。一个列名或者表达式。

返回值

SQLite group_concat() 函数返回一个通过逗号分隔的字符串,它包含了指定的分组中的指定表达式或者列中的所有值。

group_concat() 示例

这里列出了几个常见的 group_concat() 用法示例。

基本用法

这个示例说明了 SQLite group_concat() 函数的基本用法。

SELECT group_concat('Hello');
group_concat('Hello')
---------------------
Hello

这种用法没有太多的实用价值。 SQLite group_concat() 一般用在表的聚合查询中。

从表中使用 group_concat() 返回数组

为了演示 group_concat() 的用法,我们使用以下 UNION 语句模拟一个表:

SELECT 'Tim' name, 'Football' hobby
UNION
SELECT 'Tim' name, 'Baseball' hobby
UNION
SELECT 'Tom' name, 'Piano' hobby
UNION
SELECT 'Tom' name, 'violin' hobby;
name  hobby
----  --------
Tim   Baseball
Tim   Football
Tom   Piano
Tom   violin

这里,我们拥有了关于用户爱好的一些行。其中,每行中是用户的一个爱好。

如果我们需要将每个人的爱好信息都放在一行里,并且把每个人的爱好都放在一个列中(通过逗号分隔),请使用以下语句:

SELECT
    t.name,
    group_concat(t.hobby) hobbies
FROM (
    SELECT 'Tim' name, 'Football' hobby
    UNION
    SELECT 'Tim' name, 'Baseball' hobby
    UNION
    SELECT 'Tom' name, 'Piano' hobby
    UNION
    SELECT 'Tom' name, 'violin' hobby
) t
GROUP BY t.name;
name  hobbies
----  -----------------
Tim   Baseball,Football
Tom   Piano,violin

这里,我们使用 GROUP BY 子句 和 group_concat() 函数将同一个 name 的爱好信息都放在 hobbies 列的字符串中。