我必须对包含给定字母的记录进行计数,例如,列A将包含包含“ a”或“ A”的记录计数,对于E,它将是包含“ e”或“ E”的记录计数。仅通过使用分组功能,有什么方法可以做到这一点?
我可以通过使用子查询来做到这一点,但是在学习子查询之前我们在课堂上就有这项任务,我不知道如何通过分组来做到这一点。
我想通过分组实现以下代码的结果:
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;
答案 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;