Подсчитайте количество записей, которые имеют символы A, B, C для данного столбца

0

Если таблица базы данных имеет столбец, значения которого похожи на "A.B", "C.D", "A.C", как я могу использовать sql-запросы, чтобы узнать количество записей, которые имеют "A", "B" ',' C 'или' D '(группа по символам)?

Я ожидал, что результатом будет:

 _________________________
|  Characters| COUNT(*)   |
|*************************|
|    A       |    10      |
|*************************|
|    B       |    15      |
|************|************|
|    C       |     8      |
|************|************|
|    D       |     17     |
|____________|____________|

Запись для столбца, которая имеет как "A", так и "B" (например, "A.B"), должна учитываться как в "A", так и "B".

  • 1
    Пометьте свой вопрос базой данных, которую вы используете.
Теги:

2 ответа

4
Лучший ответ

Вы можете сделать это с помощью сопоставления с образцом. Вот один из способов:

select pattern.name, count(t.column)
from (select '%A%' as pattern, 'A' as name union all
      select '%B%' as pattern, 'B' as name union all
      select '%C%' as pattern, 'C' as name union all
      select '%D%' as pattern, 'D' as name
     ) patterns left join
     t
     on t.column like patterns.pattern
group by pattern.name;

Обратите внимание, что это использует подзапрос, чтобы определить "производную таблицу" для шаблонов. Этот точный синтаксис может не работать во всех базах данных, но что-то подобное должно работать.

1

Ну вот:

create table my_table (
  characters varchar(100)
);

insert into my_table (characters) values ('A.B');
insert into my_table (characters) values ('C.D');
insert into my_table (characters) values ('A.C');

select 'A' as letter, count(*) from my_table where characters like '%A%'
union select 'B', count(*) from my_table where characters like '%B%'
union select 'C', count(*) from my_table where characters like '%C%'
union select 'D', count(*) from my_table where characters like '%D%';

Результат:

letter  count(*)
------  --------
A              2
B              1
C              2
D              1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню