如果你想让一家公司只计算一个正则表达式,你可以这样做:
select (case when REGEXP_LIKE(company_name, '(*)A. en P.$') then '(*)A. en P.$'
when REGEXP_LIKE(company_name, '(*)A.C.$') then '(*)A.C.$'
when REGEXP_LIKE(company_name, '(*)GmbH$') then '(*)GmbH$'
when REGEXP_LIKE(company_name, '(*)A/S$') then '(*)A/S$'
end), count(*)
from company
group by (case when REGEXP_LIKE(company_name, '(*)A. en P.$') then '(*)A. en P.$'
when REGEXP_LIKE(company_name, '(*)A.C.$') then '(*)A.C.$'
when REGEXP_LIKE(company_name, '(*)GmbH$') then '(*)GmbH$'
when REGEXP_LIKE(company_name, '(*)A/S$') then '(*)A/S$'
end);
如果您想为每场比赛计算一家公司,那么这是一种方法:
with patterns(pattern) as (
select '(*)A. en P.$' from dual union all
select '(*)A.C.$' from dual union all
select '(*)GmbH$' from dual union all
select '(*)A/S$' from dual
)
select p.pattern, count(*)
from company c join
patterns p
on regexp_like(c.company_name, p.pattern)
group by p.pattern;
关于您的模式的一些说明:
- 我不确定是什么
(*)
。一开始你不需要任何东西,因为正则表达式会在字符串中找到模式;它们不是从字符串的开头开始的。
.
是正则表达式中的特殊字符,基本上是任何单个字符。