Postgresql:按模式聚合结果

时间:2013-03-26 15:02:33

标签: postgresql

我需要列出我在不同游泳池上有多少辆汽车。

这是我得到的:

select count(*), pool from cars group by 2 order by 1 desc;

 count | pool
-------+--------
    71 | A-12-A
    69 | B-45-A
    19 | A-45-B
    18 | A-69-A
    15 | B-12-B
    13 | A-67-B
(6 rows)

但我并不关心中间价值。我只关注第一个和最后一个字母(汽车分类和我们使用的内部值)。

如果有可能,我怎么能得到这样的东西:

 count | pool
-------+--------
    89 | A-%-A
    69 | B-%-A
    32 | A-%-B
    15 | B-%-B
(6 rows)

1 个答案:

答案 0 :(得分:1)

这样的事情:

select count(*) as cnt, 
       regexp_replace(pool, '-[0-9]{2}-', '-%-', 'gi') as clean_pool
from cars
group by clean_pool
order by 1 desc;

SQLFiddle:http://sqlfiddle.com/#!12/ac449/2

这假设中间部分总是包含两位数。如果不是这种情况,则需要调整正则表达式以应对该问题。