📜  如何对 PostgreSQL 中的所有列进行分组和连接数组(1)

📅  最后修改于: 2023-12-03 15:09:05.532000             🧑  作者: Mango

如何对 PostgreSQL 中的所有列进行分组和连接数组

在 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 中的所有列进行分组并连接为数组。在实践中,这非常有用,因为它可以帮助您在查询中编写更简单,更直观的代码,并且可以快速生成各种格式的数据。