📅  最后修改于: 2023-12-03 15:09:05.532000             🧑  作者: Mango
在 PostgreSQL 中,可以使用 array_agg()
函数将分组的多个值连接为一个数组。
我们使用以下简单的数据表进行示例:
CREATE TABLE test_table (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INTEGER NOT NULL,
gender VARCHAR(10) NOT NULL
);
INSERT INTO test_table (name, age, gender) VALUES ('Alice', 30, 'female'), ('Bob', 25, 'male'), ('Charlie', 35, 'male'), ('David', 35, 'male'), ('Eve', 25, 'female');
以下是如何对单个列进行分组并将分组的值连接为数组的示例:
SELECT gender, array_agg(name) FROM test_table GROUP BY gender;
此查询将返回每个性别的名字数组,格式如下:
gender | array_agg
--------+--------------------
female | {Alice,Eve}
male | {Bob,Charlie,David}
如果您想对多个列进行分组并将值连接为数组,则可以在 array_agg()
函数中包含多个列名,如下所示:
SELECT age, gender, array_agg(name) FROM test_table GROUP BY age, gender;
此查询将返回每个年龄和性别组合的名字数组,格式如下:
age | gender | array_agg
-----+--------+------------------------------
25 | female | {Eve}
25 | male | {Bob}
30 | female | {Alice}
35 | male | {Charlie,David}
注意,您可以在 SELECT
子句中包含任意数量的列,只需在 GROUP BY
子句中包含相同数量的列即可。
现在您知道如何对 PostgreSQL 中的所有列进行分组并连接为数组。在实践中,这非常有用,因为它可以帮助您在查询中编写更简单,更直观的代码,并且可以快速生成各种格式的数据。