pgsql json_agg
在PostgreSQL中,json_agg函数可用于将行合并成一个JSON数组。这在处理具有重复值的数据时非常有用,可以将重复值合并为一个数组,方便进行处理和分析。
语法
json_agg(expression)
参数
- expression:要合并为数组的表达式
示例
假设我们有一个名为users
的表,包含用户的信息,结构如下:
CREATE TABLE users (
id serial PRIMARY KEY,
name VARCHAR,
email VARCHAR
);
INSERT INTO users (name, email) VALUES ('Alice', 'alice@geek-docs.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@geek-docs.com');
INSERT INTO users (name, email) VALUES ('Alice', 'alice@geek-docs.com');
INSERT INTO users (name, email) VALUES ('Alice', 'alice@geek-docs.com');
现在我们要查询每个用户的email,并将相同用户的email合并为一个数组:
SELECT name, json_agg(email) AS emails
FROM users
GROUP BY name;
运行上述查询后,结果如下:
name | emails
-------+------------------------------------------
Alice | ["alice@geek-docs.com","alice@geek-docs.com","alice@geek-docs.com"]
Bob | ["bob@geek-docs.com"]
通过json_agg函数,我们成功将相同用户的email合并为一个数组,便于后续处理和分析。
除了基本的用法外,json_agg还可以与json_object_agg一起使用,以便将多个字段合并为JSON对象。例如:
SELECT name, json_agg(json_build_object('email', email)) AS emails
FROM users
GROUP BY name;
上述查询的结果如下:
name | emails
-------+--------------------------------------------------------
Alice | [{"email" : "alice@geek-docs.com"},{"email" : "alice@geek-docs.com"},{"email" : "alice@geek-docs.com"}]
Bob | [{"email" : "bob@geek-docs.com"}]
通过结合json_build_object函数,我们将email字段合并为带有键的JSON对象。
总的来说,json_agg函数是PostgreSQL中非常实用的函数之一,可以帮助我们快速合并数据,方便后续处理和分析。如果你处理数据库中的重复数据或需要将多个字段合并为JSON对象,json_agg函数将是你的好帮手。