Вы можете сделать это, используя логические выражения:
select t.*,
( (col like '%a%') +
(col like '%b%') +
(col like '%s%') +
) as num_matches
from t
order by num_matches desc;
Если слова должны быть разделены пробелами, то:
select t.*,
( (concat(' ', col, ' ') like '% a %') +
(concat(' ', col, ' ') like '% b %') +
(concat(' ', col, ' ') like '% s %') +
) as num_matches
from t
order by num_matches desc;
Наконец, если у вас есть проблема такого типа, то вам нужно сделать одну из двух вещей:
- Если текст на самом деле является текстом, посмотрите на возможности полнотекстового поиска.
- Если текст на самом деле представляет собой список чего-то вроде ключевых слов или пользователей, исправьте модель данных и используйте таблицу соединений / связей.