-1

ip_address、contary_name、region_nameの3つのフィールドを含むテーブルがあります。

         ip_address         countary_name      region_name
         100.12.34.19           xyz               jk                 
         100.12.34.23           xyz               jk
         170.63.34.41           abc               mn
         170.63.34.42           abc               mn
         170.63.34.43           abc               mn

だから私はこのようないくつかのクエリが必要です:

select distinct substring('rex_exp') as common_ip,
       substring('rex_exp') as ip_part,countary_name,region_name
  from table;

出力は

         common_ip      ip_part        countary_name      region_name
         100.12.34.     19,23           xyz               jk                 
         170.63.34.     41,42,43        abc               mn        
4

1 に答える 1

2

ip_addressのタイプがtext(またはvarchar)であるとすると、次のようになります。

select common_ip,
       string_agg(ip_part, ',')
       country_name,
       region_name
from (
  select substring(ip_address from '[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}') as common_ip,
         substring(ip_address from '[0-9]{2,3}$') as ip_part,
         country_name, 
         region_name
  from some_table
) t
group by common_ip, country_name, region_name;

古いPostgresバージョンの場合、string_aggをarray_aggとarray_to_stringの組み合わせに置き換えることができます

select common_ip,
       array_to_string(array_agg(ip_part), ',')
       country_name,
       region_name
from (
  select substring(ip_address from '[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}') as common_ip,
         substring(ip_address from '[0-9]{2,3}$') as ip_part,
         country_name, 
         region_name
  from some_table
) t
group by common_ip, country_name, region_name;
于 2012-06-21T06:25:50.387 に答える