繁体   English   中英

如何在Postgres查询中按正则表达式分组

[英]How to group by a regular expression in a postgres query

我正在清理别人的静态应用程序,这样做似乎有一些未使用的路由。 为了开始故障排除,我创建了一个带有唯一文本列的表来存储路由。

---------routes---------
https://test.com/user/1/info
https://test.com/test/2/info
https://test.com/banana/100
https://test.com/post/3/date
https://test.com/post/
https://test.com/grape/
http://test.com/post/3/date
https://test.com/banana/3
https://test.com/user/2/info
https://test.com/test/5/info
.
.
.

现在,id要做的是,使用一些正则表达式(或其他任何形式)进行查询,将上面的条目分组以得到以下结果:

---------routes---------
https://test.com/user/{x}/info
https://test.com/test/{x}/info
https://test.com/post/{x}/date
https://test.com/post/
https://test.com/grape/
http://test.com/post/{x}/date
https://test.com/banana/{x}

其中{x}只是由于分组而产生的一些通用标记。 我知道我们可以搜索特定的正则表达式,但是我不会尝试将字符串折叠为组,然后吐出“推荐”组

PS:因为我们陷入了石器时代,所以任何解决方案都受PostgreSQL 8.4.20的限制

编辑 -

克林,您的答案对我来说不是很有效,因为它给了我

     regexp_replace        | count 
------------------------------+-------
 https://test.com/user/1/info |     1
 https://test.com/test/2/info |     1
 https://test.com/banana/100  |     1
 \x01{x}ate                   |     2
 https://test.com/user/2/info |     1
 https://test.com/grape/      |     1
 https://test.com/test/5/info |     1
 https://test.com/post/       |     1
 https://test.com/banana/3    |     1
(9 rows)

但是至少这给了我一些想法,我会在我玩的更多的时候回发

我无法在8.4中对此进行测试...

with routes(url) as (
values
    ('https://test.com/user/1/info'),
    ('https://test.com/test/2/info'),
    ('https://test.com/banana/100'),
    ('https://test.com/post/3/date'),
    ('https://test.com/post/'),
    ('https://test.com/grape/'),
    ('http://test.com/post/3/date'),
    ('https://test.com/banana/3'),
    ('https://test.com/user/2/info'),
    ('https://test.com/test/5/info')
)

select regexp_replace(url, '^(.+//.+/.+/)\d+', '\1{x}'), count(*)
from routes
group by 1

         regexp_replace         | count 
--------------------------------+-------
 https://test.com/banana/{x}    |     2
 https://test.com/post/{x}/date |     1
 http://test.com/post/{x}/date  |     1
 https://test.com/user/{x}/info |     2
 https://test.com/test/{x}/info |     2
 https://test.com/grape/        |     1
 https://test.com/post/         |     1
(7 rows)    

您可以在此处进行测试(Postgres 9.5)。

在此处检查图案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM