Python select语句获取所有相同的记录,但一个集合中只有一个字段不同

Python select语句获取所有相同的记录,但一个集合中只有一个字段不同,python,sql,postgresql,Python,Sql,Postgresql,您好,我正在尝试找出如何通过查询将以下信息从表中获取到集合中 tbl_hosts ============ ip proto port 1.1.1.1 tcp 123 1.1.1.1 tcp 161 1.1.1.1 tcp 443 1.1.1.1 udp 161 1.1.1.1 udp 123 1.1.1.2 t

您好,我正在尝试找出如何通过查询将以下信息从表中获取到集合中

tbl_hosts
============
ip           proto       port
1.1.1.1        tcp        123
1.1.1.1        tcp        161
1.1.1.1        tcp        443
1.1.1.1        udp        161
1.1.1.1        udp        123
1.1.1.2        tcp        80
1.1.1.3        tcp        80
1.1.1.3        tcp        443
我正在试图找出如何以这种格式获取以下信息

1.1.1.1 - tcp - 123,161,443
1.1.1.2 - tcp - 80
1.1.1.3 - tcp - 80,443
非常感谢您的回答Gordon Linoff,我还有一个问题,如果同一ip有多个协议和多个端口,是否也可以这样做

1.1.1.1 - (tcp:123,161,443)(udp:161,123)
1.1.1.2 - tcp - 80
1.1.1.3 - tcp - 80,443

我推荐
array\u agg()


在Postgres中使用数组通常比使用字符串更容易。但是,如果确实需要字符串,请使用
string\u agg()

我建议
array\u agg()


在Postgres中使用数组通常比使用字符串更容易。但是,如果你真的需要一个字符串,请使用
string\u agg()

可能的重复非常感谢你的回答,我刚刚尝试了以下查询,选择ip,string\u agg(协议,端口)作为t group by ip的端口,但是输出结果会很奇怪,就像tcp for 1.1.1.1只有3个端口一样,但它会在输出中显示6次,只有2个端口的udp会显示4次,这真的很奇怪,不知道为什么会发生这种情况。非常感谢您的响应,我刚刚尝试了以下查询,按ip从t组中选择ip,string_agg(协议,端口)作为端口,但输出结果会很奇怪,因为1.1.1.1的tcp只有3个端口,但是它会在输出中显示6次,而只有2个端口的udp会显示4次,这真的很奇怪,不知道为什么会这样。
select ip, proto, array_agg(port) as ports
from t
group by ip, proto;