Подсчитать совпадающие значения в sqlite - PullRequest
1 голос
/ 21 мая 2019

Я хочу посчитать совпадающие значения в данных, как в (таблица1)

name    id  subject
maria   01  Math computer english
faro    02  Computer stat english
hina    03  Chemistry physics bio

Запрос ниже

Select *
from table1
where subject like ‘%english%’ or 
      subject like ‘%stat%’

возвращает первые две строки:

Но мне также нужно посчитать совпадающие значения, как показано ниже:

count
1
2
0

(поскольку в первом ряду совпадает только одно значение, во втором - два совпадения, а в третьем - нет совпадений).

Могу ли я получить желаемый результат ??

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Вы можете попробовать суммировать CASE выражения, которые проверяют каждое условие:

SELECT
    subject,
    CASE WHEN subject LIKE '%english%' THEN 1 ELSE 0 END +
    CASE WHEN subject LIKE '%stat%' THEN 1 ELSE 0 END AS count
FROM 
    yourTable;

Если вы вместо этого хотите получить количество слов в каждом предмете, которое не соответствует одному из двух ключевых слов, вы можете попробовать:

SELECT
    subject,
    LENGTH(subject) - LENGTH(REPLACE(subject, ' ', '')) + 1 -
    ( subject LIKE '%English%' ) - ( subject LIKE '%stat%' ) AS count
FROM yourTable;

enter image description here

Демо

1 голос
/ 21 мая 2019

SQLite проверяет условия, возвращающие логические значения с 1 и 0 для true и false соответственно, поэтому вы можете сделать это следующим образом:

select *,
  (subject like '%english%') 
  + 
  (subject like '%stat%') as count 
from table1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...