Подсчет вхождений в строку через MySQL

0

Я хочу посчитать вхождения строки в столбце "диагностика".

То, что я делаю сейчас, это просто - это дает мои необходимые результаты

SELECT COUNT(*), diagnosis
FROM patients
WHERE diagnosis like "%OS1%"
UNION

SELECT COUNT(*), diagnosis
FROM patients
WHERE diagnosis like "%OS2%"

... and so on

Иногда в моей таблице строки могут встречаться дважды (например, OS1, OS2), я хочу подсчитать каждый случай появления строк.

Я думаю, что это было бы довольно простой задачей на другом языке, но я хочу сделать это на чистом SQL.

  • 0
    Как узнать, какие значения OS1, OS2 и т. Д. Нужно искать?
  • 0
    Строки ограничены OS1-OS6 и CH1-CH6
Показать ещё 1 комментарий
Теги:

4 ответа

2

Поместите значения OS1-OS6 и CH1-CH6 в таблицу диагностики. JOIN И GROUP BY:

SELECT COUNT(*), d.diagnosis
FROM patients p
RIGHT JOIN diagn d
   on p.diagnosis like concat('%', d.diagnosis, '%')
group by d.diagnosis
0

Не уверен, что это работает.

SELECT COUNT(*) 
FROM patients 
WHERE REGEXP_LIKE(diagnosis, "(OS[1-6]|CH[1-6])")

Вы также можете проверить ссылку ниже, если вам интересно. Не уверен, что это то, что вы ищете, хотя:
https://dev.mysql.com/doc/refman/8.0/en/regexp.html

0
SELECT sum(OS1) as OS1_total, sum(OS2) as OS2_total, sum(OS3) as OS3_total,
sum(OS4) as OS4_total, sum(OS5) as OS5_total, sum(OS6) as OS6_total, 
sum(CH1) as CH1_total, sum(CH2) as CH2_total, sum(CH3) as CH3_total,
sum(CH4) as CH4_total, sum(CH5) as CH5_total, sum(CH6) as CH6_total
FROM
(
SELECT (case when diagnosis like '%OS1%' then 1 else 0 end) as OS1,
(case when diagnosis like '%OS2%' then 1 else 0 end) as OS2,
(case when diagnosis like '%OS3%' then 1 else 0 end) as OS3,
(case when diagnosis like '%OS4%' then 1 else 0 end) as OS4,
(case when diagnosis like '%OS5%' then 1 else 0 end) as OS5,
(case when diagnosis like '%OS6%' then 1 else 0 end) as OS6,
(case when diagnosis like '%CH1%' then 1 else 0 end) as CH1,
(case when diagnosis like '%CH2%' then 1 else 0 end) as CH2,
(case when diagnosis like '%CH3%' then 1 else 0 end) as CH3,
(case when diagnosis like '%CH4%' then 1 else 0 end) as CH4,
(case when diagnosis like '%CH5%' then 1 else 0 end) as CH5,
(case when diagnosis like '%CH6%' then 1 else 0 end) as CH6
FROM patients
) as mytable
  • 0
    Тот исправил это! Большое спасибо!
  • 0
    Если вы найдете ответ полезным, отметьте его как полезный, нажав стрелку вверх.
0

Вы также можете попробовать:

SELECT COUNT(*), diagnosis
FROM patients
GROUP BY diagnosis;

Ещё вопросы

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