PostgreSQL 查询按列表中的子网对 IP 整数值进行分组

问题描述 投票:0回答:1

假设我有以下表格:

ip         | value
2379284488 | 2
2379284482 | 4
3226028805 | 3

我有一个包含两个整数的列表,3226028800 和 2379284480,我想创建一个具有与此类似的输出的查询:

net        | ip         | value
2379284480 | 2379284488 | 2
2379284480 | 2379284482 | 4
3226028805 | 3226028805 | 3

哪里

net & ip = net
。在 PostgreSQL 中的单个查询中执行此操作的最简单方法是什么?

sql postgresql
1个回答
0
投票

您可以像下面的代码一样简单地加入他们:

WITH subnet_list AS (
    SELECT unnest(ARRAY[3226028800, 2379284480]) AS subnet
)
SELECT 
    SL.subnet AS net,
    ip_table.ip,
    ip_table.value
FROM
    subnet_list SL
JOIN 
    ip_table ON (ip_table.ip & SL.subnet) = SL.subnet;

这里是示例小提琴链接

© www.soinside.com 2019 - 2024. All rights reserved.