我需要列出我在不同游泳池上有多少辆汽车。
这是我得到的:
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)
答案 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
这假设中间部分总是包含两位数。如果不是这种情况,则需要调整正则表达式以应对该问题。