Подсчет записей, которые содержат буквы, заданные в (SQL) - PullRequest
0 голосов
/ 10 июня 2019

Мне нужно подсчитать записи, содержащие заданные буквы, например, столбец 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 ]

2 голосов
/ 10 июня 2019

вы можете использовать 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
0 голосов
/ 10 июня 2019

Правильное выражение использует 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...