繁体   English   中英

Node / Postgres SQL 选择不同的条目,然后将具有相同引用的所有其他条目放入一列

[英]Node / Postgres SQL Select distinct entries then put all other entries with the same reference into one column

这个问题可能是在某个地方问过的,但我似乎无法在搜索中正确表达它以找到准确的答案。

我正在对 Postgres 数据库进行查询,它有很多连接,结果是这样的:

WON   |   name   |   item
1         Joe        A
1         Joe        B
2         Smith      A

所以每个条目一行,我需要以某种方式得到结果:

WON   |   name   |   item
1         Joe        A, B
2         Smith      A

这可以在查询中或使用 NodeJS 完成,查询有成百上千的结果,因此获得一个不同的行(WON 1)然后在数据库中搜索匹配它的所有条目然后重复其余的条目是不可行的,所以这可能在 Node/Javascript 中做得更好,但我对此有点陌生,什么是(有点)有效的方法来做到这一点?

如果有一种方法可以在查询本身中做到这一点,那么这将是我的偏好。

谢谢

您可以使用 GROUP BY 和string_agg来取消行,如下所示:

创建表:

CREATE TABLE test
(
won int,
name character varying(255),
item character varying(255)
); 


insert into test (won, name, item) values (1,'Joe', 'A'),(1, 'Joe', 'B'),(2, 'Smith', 'A')

并在查询中执行此操作:

select won, name, string_agg(item, ',') from test group by won, name order by won

sqlFiddle 中查看此示例

一种sql方法:

SELECT won, name
      ,STRING_AGG(item, ',' ORDER BY item) AS items
  FROM myTable
  GROUP BY won, name
  ORDER BY won, name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM