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)