SQLite json_group_object() 函数使用指南

SQLite json_group_object() 函数是一个聚合函数,它返回一个包含了分组中的由指定的列作为键值对的 JSON 对象。

类似的, json_group_array() 函数返回一个包含了分组中指定列中的值组成的数组。

json_group_object() 语法

这里是 SQLite json_group_object() 的语法:

json_group_object(key_expr, value_expr)

参数

key_expr
必需的。一个用于生成 JSON 中键的列名或者表达式。
value_expr
必需的。一个用于生成 JSON 中值的列名或者表达式。

返回值

SQLite json_group_object() 函数返回一个对象,它包含了指定的分组中由指定的列组成的键值对。

json_group_object() 示例

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

基本用法

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

SELECT json_group_object('x', 'y');
json_group_object('x', 'y')
---------------------------
{"x":"y"}

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

从表中使用 json_group_object() 返回对象

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

SELECT 'Tim' name, 'Math' subject, 'A' grade
UNION
SELECT 'Tim' name, 'English' subject, 'B' grade
UNION
SELECT 'Tom' name, 'Math' subject, 'B' grade
UNION
SELECT 'Tom' name, 'English' subject, 'A' grade;
name  subject  grade
----  -------  -----
Tim   English  B
Tim   Math     A
Tom   English  A
Tom   Math     B

这里,我们拥有了关于用户成绩的一些行。其中,每行中是用户的一个科目的成绩。

如果我们需要将每个人的成绩信息都放在一行里,并且把每个人的成绩都放在一个对象中,请使用以下语句:

SELECT
    t.name,
    json_group_object(t.subject, t.grade) grades
FROM (
    SELECT 'Tim' name, 'Math' subject, 'A' 'grade'
    UNION
    SELECT 'Tim' name, 'English' subject, 'B' 'grade'
    UNION
    SELECT 'Tom' name, 'Math' subject, 'B' 'grade'
    UNION
    SELECT 'Tom' name, 'English' subject, 'A' 'grade'
) t
GROUP BY t.name;
name  grades
----  --------------------------
Tim   {"English":"B","Math":"A"}
Tom   {"English":"A","Math":"B"}

这里,我们使用 GROUP BY 子句 和 json_group_object() 函数将同一个 name 的成绩信息都放在 grades 列的 JSON 对象中。

json_group_object(t.subject, t.grade) 函数使用了 subject 列的值作为键和 grade 列的值作为值。