You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中按子网列表分组IP整数值的最简单查询方法

PostgreSQL 查询实现方案

需求说明

现有结构如下的表(假设表名为ip_table):

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

给定整数列表[3226028800, 2379284480],需要生成PostgreSQL查询,得到如下格式的输出:

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

需满足条件:net & ip = net。

最简查询语句

可以用UNNEST把列表转成临时net集合,再与原表关联处理,同时兼容无匹配net的ip记录:

SELECT
    COALESCE(n.net, t.ip) AS net,
    t.ip,
    t.value
FROM
    ip_table t
LEFT JOIN
    UNNEST(ARRAY[3226028800, 2379284480]) AS n(net)
ON
    t.ip & n.net = n.net
ORDER BY
    net, ip;

逻辑说明

  • UNNEST(ARRAY[...])将给定整数列表转换为包含net列的临时数据集。
  • LEFT JOIN确保原表所有记录都被保留,即便没有匹配列表中的net值。
  • COALESCE(n.net, t.ip):匹配到对应net时使用该net值;无匹配时(如示例中的3226028805),直接用ip自身作为net值,贴合输出要求。
  • 条件t.ip & n.net = n.net保证net是ip的前缀掩码(按位与运算结果等于net本身)。

内容的提问来源于stack exchange,提问作者markzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:49:54