0

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

这是我得到的:

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)

?

4

1 回答 1

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

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

于 2013-03-26T15:06:15.787 回答