【发布时间】:2010-12-07 15:07:28
【问题描述】:
在 SQL (postgresql 8.4.x) 中,如何有效地COUNT 落在可能包含网络块的最小 网络块内的 IP 记录数?例如,我不想在10/8 和0/0 下计算10.0.0.1。
更具体地说,给定:
-- CREATE TABLE iplog (ip INET NOT NULL, ...)
--
ip | ...
==============+=====
192.168.1.100 | ...
192.168.1.101 | ...
192.168.55.5 | ...
10.1.2.3 | ...
-- CREATE TABLE netblocks (nb CIDR UNIQUE NOT NULL, ...)
--
nb | ...
===============+======
192.168.1.0/24 | ...
192.168.0.0/16 | ...
10.0.0.0/8 | ...
0.0.0.0/0 | ...
如何有效地生成结果集:
nb | ips_logged
===============+============
192.168.1.0/24 | 2
192.168.0.0/16 | 1
10.0.0.0/8 | 1
【问题讨论】:
-
我认为您的问题和我的回答更适合dba.se - 如果您同意,您是否愿意考虑自我标记以进行迁移?我看到你已经有一个帐户...
标签: sql postgresql count intervals