2015-10-07 107 views
1

问表:如何计算逗号分隔列中的出现次数?

id   | tags 
-------------------------------------- 
1   | css,javascript,html 
2   | mysql,sql,html 
3   | css,spring,php  
4   | css,java,html 

我试图找出如何返回每个标签的发生串的次数。

结果表:

tags   | count 
-------------------------------------- 
css   | 3 
html   | 3 
javascript | 1  
php   | 1 

回答

2

您可以使用:

SqlFiddleDemo

SELECT sub.val AS tags, COUNT(*) AS `count` 
FROM 
(
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.tags, ',', n.n), ',', -1) AS val 
    FROM tab t 
    CROSS JOIN 
    (
    SELECT a.N + b.N * 10 + 1 n 
     FROM 
     (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
     ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
     ORDER BY n 
) n 
    WHERE n.n <= 1 + (LENGTH(t.tags) - LENGTH(REPLACE(t.tags, ',', ''))) 
) sub 
GROUP BY sub.val 
+1

你的答案是如此之大,比你这么多,这是我想要的...... – theinlwin

+0

同样的价值如何计数? – theinlwin

+0

@theinlwin我不会翘首以待您的最后一个问题 – lad2025

2

您可以简单地尝试这样的:

SELECT COUNT(*) FROM my_table WHERE tags like '%css%'; 
SELECT COUNT(*) FROM my_table WHERE tags like '%html%'; 
SELECT COUNT(*) FROM my_table WHERE tags like '%javascript%'; 
SELECT COUNT(*) FROM my_table WHERE tags like '%php%'; 

的另一种方式是使用这样的:

(LENGTH(`tags`) - LENGTH(REPLACE(`tags`, 'searchword', '')))/LENGTH('searchword') 
+0

谢谢,但我想同样的值每个计数形式表内 – theinlwin

+0

@theinlwin: - '但我想同样的值每个计数形式表inside'我不知道你是什么意思? –

+0

:请参阅http://sqlfiddle.com/#!2/eeda7/9 – theinlwin