Как извлечь отдельные теги из столбца TAGS? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть следующая таблица в базе данных MySQL:

id    creation_date                         score     tags
1     2016-02-09 07:24:59.097000+00:00      -1        html|javascript
2     2016-02-09 08:10:00.000000+00:00      0         xml|css
3     2016-02-10 08:00:15.000000+00:00      2         html|javascript
4     2016-02-11 07:00:45.000000+00:00      -5        html|css

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

Ожидаемый результат для вышеуказанного запроса будет:

TAG          FREQUENCY
html         2
css          1
javascript   1
xml          0

Я застреваю с поиском отдельных тегов из столбцов.

SELECT tags, COUNT(*) 
FROM my_table 
WHERE score < 0

1 Ответ

0 голосов
/ 01 сентября 2018

Когда вы застряли в таком ужасном формате данных, вы можете что-то с ним сделать. Таблица чисел может помочь, но вот пример, который будет извлекать до первых 3 элементов:

select substring_index(substring_index(tags, '|', n.n), '|', -1) as tag, count(*)
from (select 1 as n union all
      select 2 as n union all
      select 3 as n
     ) n join
     t
     on n.n <= length(tags) - length(replace(t.tags, '|', '')) + 1
group by tag;

Что это делает? Предложение on гарантирует, что в строке есть как минимум теги n для данного значения n (большие значения отфильтровываются).

Две функции substring_index() извлекают n-й тег из списка. И тогда происходит агрегация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...