H,
如何在“group By”子句中使用模式匹配功能。
以下是数据
emp_name transaction_id
John 1001
John= 1002
Peter 1003
我想基于emp_name进行分组。这里'John'和'John ='都是同一名员工。如果员工姓名在列的末尾有“=”符号,我想忽略。
预期结果:
Emp_name countt
John 2
Peter 1
答案 0 :(得分:3)
replace
工作正常且速度很快。但是既然你要求模式匹配,这里有一个模式的答案:
SELECT regexp_replace(emp_name, '=$', ''), count(*) AS countt
FROM employees
GROUP BY regexp_replace(emp_name, '=$', '');
答案 1 :(得分:1)
select
replace (emp_name, '=', '') as emp_name,
count (*) as countt
from employees
group by replace (emp_name, '=', '')
编辑,因为您说该名称可以包含=
select
case
when emp_name like '%='
then substr (emp_name, 1, length (emp_name) - 1)
else emp_name
end as emp_name,
count (1) as countt
from employees
group by
case
when emp_name like '%='
then substr (emp_name, 1, length (emp_name) - 1)
else emp_name
end
答案 2 :(得分:1)
一个简单的case语句只替换最右边的=如果存在的话。
SELECT case when right(emp_name,1) = '=' then left(emp_Name,len(emp_name-1))
else emp_name end as EmpName, count(Transaction_ID) countt
FROM dataTable
GROUP BY case when right(emp_name,1) = '=' then left(emp_Name,len(emp_name-1))
else emp_name end