Postgresql-按连字符拆分字符串,并按字符串的第二部分分组

Postgresql-按连字符拆分字符串,并按字符串的第二部分分组,postgresql,Postgresql,我将数据存储为以下格式: resource_name | readiops | writeiops 90832-00:29:3E 3.21 4.00 90833-00:30:3E 2.12 3.45 90834-00:31:3E 2.33 2.78 90832-00:29:3E 4.21 6.

我将数据存储为以下格式:

   resource_name      |    readiops   | writeiops  
     90832-00:29:3E        3.21           4.00
     90833-00:30:3E        2.12           3.45
     90834-00:31:3E        2.33           2.78
     90832-00:29:3E        4.21           6.00
我希望能够按“-”对resource\u name列进行拆分,并按拆分的第二部分对其进行分组,以便上面的数据如下所示:

      array_serial         |      ldev        |  readiops    |   writeiops  
       90832                    00:29:3E         3.21,4.21        4.00,6.00
       90833                    00:30:3E         2.12             3.45 
       90834                    00:31:3E         2.33             2.78
资源\u名称被拆分为数组\u serial&ldev

我尝试使用下面的查询只是为了得到一个错误

SELECT 
    SUBSTRING(resource_name, 0, STRPOS(resource_name, ':')) AS array_serial,
    SUBSTRING(resource_name,1, STRPOS(resource_name, ':')) AS ldev 
FROM table 
GROUP BY SUBSTRING(resource_name, 0, STRPOS(resource_name, ':'))
我是博士后的新手。所以请帮忙

使用:


魔术为什么在一个有50000条记录的表中执行查询需要60-70秒?我真的不知道。我在一个有50000个随机行的表上进行了测试,得到的时间<1s。但是请注意,查询返回数千行,因此这可能是传输时间。例如,尝试使用limit 100。它应该运行得更快,使用500k记录进行测试,此查询在普通服务器上执行大约2600毫秒。您使用的是哪个版本的postgresql?我的postgres版本是9.3.14。可能是因为我的数据库连接是远程的,我正在使用工具db visualizer执行查询?即使我将其限制为50或100,执行时间也会超过50秒。Strange@user1411837-当然,在远程服务器上,大型结果集的传输时间可能比执行时间长很多倍。尝试限制结果并使用简单的终端psql。
with my_table(resource_name, readiops, writeiops) as (
values
('90832-00:29:3E', 3.21, 4.00),
('90833-00:30:3E', 2.12, 3.45),
('90834-00:31:3E', 2.33, 2.78),
('90832-00:29:3E', 4.21, 6.00)
)

select 
    split_part(resource_name::text, '-', 1) as array_serial,
    split_part(resource_name::text, '-', 2) as ldev,
    string_agg(readiops::text, ',') as readiops,
    string_agg(writeiops::text, ',') as writeiops
from my_table
group by 1, 2;

 array_serial |   ldev   | readiops  | writeiops 
--------------+----------+-----------+-----------
 90832        | 00:29:3E | 3.21,4.21 | 4.00,6.00
 90833        | 00:30:3E | 2.12      | 3.45
 90834        | 00:31:3E | 2.33      | 2.78
(3 rows)