选择语句以获取所有相同的记录,但只有一个字段不同

时间:2019-04-18 17:25:42

标签: 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        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

1 个答案:

答案 0 :(得分:2)

我推荐array_agg()

select ip, proto, array_agg(port) as ports
from t
group by ip, proto;

在Postgres中,数组通常比字符串更容易使用。但是,如果您确实需要一个字符串,请改用string_agg()