计算包含(SQL)中给定字母的记录

时间:2019-06-09 22:54:15

标签: sql oracle

我必须对包含给定字母的记录进行计数,例如,列A将包含包含“ a”或“ A”的记录计数,对于E,它将是包含“ e”或“ E”的记录计数。仅通过使用分组功能,有什么方法可以做到这一点?

我可以通过使用子查询来做到这一点,但是在学习子查询之前我们在课堂上就有这项任务,我不知道如何通过分组来做到这一点。

我想通过分组实现以下代码的结果:

enter image description here

select
(select count(*) from table where lower(name) like '%a%') as a, 
(select count(*) from table where lower(name) like '%e%') as e
from dual;

2 个答案:

答案 0 :(得分:2)

您可以使用count + case来避免重复执行全表查询选择

select count(case when lower(name) like '%a%' then 1  end) as a
   ,count(case when lower(name) like '%e%' then 1 end) as e
from Table

答案 1 :(得分:0)

正确的表达式使用sum()

select sum(case when lower(name) like '%a%' then 1 else 0 end) as num_a,
       sum(case when lower(name) like '%e%' then 1 else 0 end) as num_e
from t;

您还可以使用正则表达式(尽管为此目的,它们可能比like更为昂贵):

select sum(case when regexp_like(name, '[aA]') then 1 else 0 end) as num_a,
       sum(case when regexp_like(name, '[eE]') then 1 else 0 end) as num_e
from t;