您好,我试图弄清楚如何进行查询以将以下信息从表中获取到集合中。
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
答案 0 :(得分:2)
我推荐array_agg()
:
select ip, proto, array_agg(port) as ports
from t
group by ip, proto;
在Postgres中,数组通常比字符串更容易使用。但是,如果您确实需要一个字符串,请改用string_agg()
。