如何从tags列中检索单个标记?

ajsxfq5m  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(521)

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
toiithl6

toiithl61#

当你被如此糟糕的数据格式困住时,你可以用它做点什么。数字表可能会有所帮助,但下面是一个示例,最多可提取前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个标记。然后是聚合。

相关问题