Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用;分组方式;通过IP对数据进行分组_Sql_Postgresql_Ip Address_Aggregation - Fatal编程技术网

Sql 如何使用;分组方式;通过IP对数据进行分组

Sql 如何使用;分组方式;通过IP对数据进行分组,sql,postgresql,ip-address,aggregation,Sql,Postgresql,Ip Address,Aggregation,如何使用groupby在postgres中按IP范围分组数据 我的桌子: "NETADDR" | ----------------| 192.168.13.6 | 192.168.13.6 | 192.168.14.5 | 192.168.14.6 | "NETADDR" | "COUNT" ----------------|----------------| 192.168.13 | 2 192.168.14

如何使用
groupby
在postgres中按IP范围分组数据

我的桌子:

   "NETADDR"    |
----------------|
 192.168.13.6   |   
 192.168.13.6   |
 192.168.14.5   |
 192.168.14.6   |
   "NETADDR"    |    "COUNT"
----------------|----------------|
 192.168.13     |      2
 192.168.14     |      2
所需输出:

   "NETADDR"    |
----------------|
 192.168.13.6   |   
 192.168.13.6   |
 192.168.14.5   |
 192.168.14.6   |
   "NETADDR"    |    "COUNT"
----------------|----------------|
 192.168.13     |      2
 192.168.14     |      2

我不确定
cidr
是否会使这项工作更有效率,因为您仍然需要进行聚合。可以使用数组函数构造类型C地址:

select array_to_string((regexp_split_to_array(netaddr, '\.'))[1:3], '.') as typec,
       count(*)
from t
group by typec;
或使用正则表达式:

select regexp_replace(netaddr, '(^[0-9]+[.][0-9]+[.]+[0-9]).*$', '\1') as typec,
       count(*)
from t
group by typec
。以字符串形式存储和处理IP地址会使此过程和其他过程变得缓慢、困难和迟钝

相反,将它们存储为,并使用它们的/24对地址进行分组

select
  set_masklen(netaddr, 24) as subnet,
  count(*)
from mytable
group by subnet
虽然它可能对这个特定的查询没有好处,
cidr
可以使用with进行索引,以便对其他查询有所帮助

create index on mytable using gist(netaddr inet_ops);

如果不能更改列类型,则仍然可以使用cidr函数进行转换
set\u masklen(netaddr::cidr,24)

什么类型是
netaddr
?请考虑使用哪种类型。这将使这更容易和更有效。