如何从TAGS列中检索单个标签?

问题描述 投票:0回答:1

我在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
mysql sql
1个回答
1
投票

当您遇到如此糟糕的数据格式时,您可以使用它做一些事情。数字表可以提供帮助,但这里有一个示例可以提取前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个标记。然后有聚合。

© www.soinside.com 2019 - 2024. All rights reserved.