我正在写一个查询,以获取所有球队的所有球员.我没有在应用程序中循环,而是决定使用array_agg()在一个查询中获得所有球队的球员.我已经把这个问题写了如下:

SELECT team_id, array_agg(team_name) AS teamname,
       array_agg(player_id||'##'||player_name) AS playerdetails
FROM team
INNER JOIN players ON team_id = player_team
GROUP BY team_id

这个查询给我的结果如下,在结果集中,teamname是重复的(精确到玩家数量)

team_id             team_name                                                                   playerdetails
1       {Australia,Australia,Australia,Australia}                       {"5##Glenn Donald McGrath","6##Shane Warne","2##Steve Waugh","1##Adam Gilchrist"}
2       {India,India,India,India}                                       {"8##Kapil Dev","11##Saurav Ganguly","3##Rahul Dravid","9##Sachin Tendulkar"}
3       {"South Africa","South Africa","South Africa","South Africa"}   {"12##Gary Kristen","4##Shaun Pollock","7##Jacques Kallis","10##Alan Donald"}

有没有办法像这样返回结果

team_id             team_name                                                                   playerdetails
1                   Australia                       {"5##Glenn Donald McGrath","6##Shane Warne","2##Steve Waugh","1##Adam Gilchrist"}

我已经使用子查询实现了它,但是我想知道是否可以在没有子查询的情况下编写它

SELECT team_id, teamname[1], playerdetails
FROM (
  SELECT team_id, array_agg(team_name) AS teamname,
         array_agg(player_id||'##'||player_name) AS playerdetails
  FROM team
  INNER JOIN players ON team_id = player_team
  GROUP BY team_id) AS tempresult  

sqfiddle人在这里.我使用的是Postgresql 8.4

[EDIT]

SELECT team_id, array_agg(team_name) AS teamname,
       array_agg(player_id||'##'||player_name) AS playerdetails,
       team_status -- could be replaced by something like array_agg(team_status)[0] or customfunction(team_status)
FROM team
INNER JOIN players ON team_id = player_team
GROUP BY team_id   

推荐答案

这其实是我的错...我的第一个问题的答案就在于这个问题本身.我只需要附上(array_agg(team_name))[1]个,早些时候我试过不用括号.

SELECT team_id, (array_agg(team_name))[1] AS teamname,
     array_agg(player_id||'##'||player_name) AS playerdetails
FROM team
INNER JOIN players ON team_id = player_team
GROUP BY team_id

Postgresql相关问答推荐

PostgreSQL散列连接与嵌套循环和散列索引

正在应用序列化迁移,但数据库没有更改

在 postgresql 中查找表的所有依赖项

订阅标签保存在哪个表中?

使用 pgx.CopyFrom 将 csv 数据批量插入到 postgres 数据库中

PostgreSQL 中的 DATEADD 等效项

如何让 Rails 使用 SSL 连接到 PostgreSQL?

Postgres 中的相似函数与 pg_trgm

H2 postgresql mode模式似乎不起作用

如何使用 psql 命令列出、创建、使用和判断数据库?

PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

Postgres - 如果找不到记录,则在更新时返回错误

PostgreSQL 表变量

如何在 redshift 中对字段进行 GROUP BY 和 CONCATENATE

如何将 Heroku PG 转储导入本地机器

防止 PostgreSQL 中的递归触发器

如何减少存储(缩减)我的 RDS 实例?

Postgresql滚动删除旧行?

用于将布尔列排序为 true、null、false 的 SQL

pg_restore 目录错误