2017-05-13 70 views
0

我对MySQL很陌生。我需要计算MySQL表/列中特定字的出现次数。如何计算Mysql数据库行中特定单词的出现次数?

我通过另一篇文章@Raging公牛,只提供一个特定的词的计数碰到下面的代码。

SELECT name,(CHAR_LENGTH(description)- 
    CHAR_LENGTH(REPLACE(description,' is ','')))/CHAR_LENGTH(' is ') AS 
TotalCount 
FROM TableName 
GROUP BY name 

有人能帮我把它对齐多个单词来计算。例如,我要计算“是”,“如”,“是”,“如何”。

+2

将所期望的结果是什么样的?而看到https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查询 – Strawberry

+0

看到有一个编辑按钮 – Strawberry

+0

字| S计数 -s是| S 10 -s如何| S 15 -s得s | 20 –

回答

0

尝试使用LENGTH代替CHAR_LENGTH和字符串截断空格,如:

SELECT name, 
    ROUND ( 
     (
      LENGTH(description) 
      - LENGTH(REPLACE(description, "is", "")) 
     )/LENGTH("is")   
    ) AS count 
FROM TableName 

更新

要算多的话,你可以写呈三角ROUND查询,并把它们相加,如:

SELECT name, 
    SELECT(
     ROUND((LENGTH(description)- LENGTH(REPLACE(description, "is", "")))/LENGTH("is")) + 
     ROUND((LENGTH(description)- LENGTH(REPLACE(description, "This", "")))/LENGTH("This")) + 
     ROUND((LENGTH(description)- LENGTH(REPLACE(description, "That", "")))/LENGTH("That")) 
     ) AS `count` 
FROM TableName 

更新2

这里的查询来获取算作单独列:

SELECT name, 
ROUND((LENGTH(description)- LENGTH(REPLACE(description, "is", "")))/LENGTH("is")) AS 'is count', 
ROUND((LENGTH(description)- LENGTH(REPLACE(description, "this", "")))/LENGTH("this")) AS 'this count', 
ROUND((LENGTH(description)- LENGTH(REPLACE(description, "by", "")))/LENGTH("by")) AS 'by count' 

FROM表名

更新3

下面是查询来获取单词汇总数:

SELECT 'is', SUM(ROUND((LENGTH(description)- LENGTH(REPLACE(description, "is", "")))/LENGTH("is"))) AS `count` FROM TableName 

UNION 

SELECT 'this', SUM(ROUND((LENGTH(description)- LENGTH(REPLACE(description, "this", "")))/LENGTH("this"))) AS `count` FROM TableName 

UNION 

SELECT 'by', SUM(ROUND((LENGTH(description)- LENGTH(REPLACE(description, "by", "")))/LENGTH("by"))) AS `count` FROM TableName 

这里的SQL Fiddle

+0

我需要多个单词的计数。至于你的代码,我需要像 -test -is - 多字的计数先生 –

+0

只在代码中,“is”正在计算。我需要多个词来计算。 喜欢,在这句话:你今天过得怎么样? 结果应该有 - How:1;是:1;您; 1 –

+0

@JohnWix添加了对多个单词进行计数的查询。 –

1

MySQL是不适合这样的事情。但是,您可以将这些值一起添加。我正确的方法就是这样;

select ((length(concat(' ', description, ' ')) - length(replace(concat(' ', description, ' '), ' is ', ''))/length(' is ') + 
     (length(concat(' ', description, ' ')) - length(replace(concat(' ', description, ' '), ' as ', ''))/length(' as ') + 
     (length(concat(' ', description, ' ')) - length(replace(concat(' ', description, ' '), ' was ', ''))/length(' was ') + 
     (length(concat(' ', description, ' ')) - length(replace(concat(' ', description, ' '), ' how ', ''))/length(' how ') 
     ) 
from t ; 

请注意,在开始和结束处使用空格来捕捉说明开头和结尾处的单词。此外,这假设只有空格用于分隔单词。

+0

它似乎给错误@Gordon Linoff –

+0

@Strawberry如何包括正则表达式。代码请。我很新 –

+0

@JohnWix我想我正在混合MariaDB - 它有W ider支持正则表达式。 – Strawberry

0
select count(adm_no) from class_manager 

尝试这其中adm_no是列名和class_manager是表

相关问题