我在表格中有两列,我想“粗略地”报告单词总数。 是否可以运行MySQL查询并查找列中的单词总数。
它基本上是由空格或多个空格分隔的任何文本。 不需要100%准确,因为它只是一般指南。
可能的?
THX
答案 0 :(得分:13)
尝试这样的事情:
SELECT COUNT(LENGTH(column) - LENGTH(REPLACE(column, ' ', '')) + 1)
FROM table
这将计算列中的caracters数量,并减去列中删除所有空格的caracters数量。你知道你的行中有多少个空格,因此知道有多少单词(大致因为你也可以输入一个双重空格,这个数字可以算作两个单词,但是你说你想要它粗糙所以这应该就够了)。
答案 1 :(得分:8)
Count只会为您提供找到的行数。您需要使用SUM。
SELECT SUM(LENGTH(column) - LENGTH(REPLACE(column, ' ', '')) + 1) FROM table
答案 2 :(得分:1)
粗略计算:
SELECT LENGTH(column) - LENGTH(REPLACE(column, SPACE(1), ''))
FROM
( SELECT CONCAT(TRIM(column), SPACE(1)) AS column
FROM
( SELECT REPLACE(column, SPACE(2), SPACE(1)) AS column
FROM
( SELECT REPLACE(column, SPACE(3), SPACE(1)) AS column
FROM
( SELECT REPLACE(column, SPACE(5), SPACE(1)) AS column
FROM
( SELECT REPLACE(column, SPACE(9), SPACE(1)) AS column
FROM
( SELECT REPLACE(column, SPACE(17), SPACE(1)) AS column
FROM
( SELECT REPLACE(column, SPACE(33), SPACE(1)) AS column
FROM tableX
) AS x
) AS x
) AS x
) AS x
) AS x
) AS x
) AS x
答案 3 :(得分:0)
当我自己寻找答案时,我偶然发现了这篇文章,说实话,我已经测试了这里的所有答案,而最接近的答案是@fikre的答案。但是,我担心单词之间有前导空格和/或多余空格的数据(在我的测试过程中,尾随空格似乎对fikre的查询没有影响)。因此,我正在寻找一种方法来识别单词之间的所有空格并将其删除。虽然我使用高级功能找到了一些答案(这超出了我的技能范围),但确实找到了一种非常简单的方法。
tl; dr> @fikre的答案是唯一对我有用的答案,但我做了一些细微的调整,以确保获得最准确的字数。
Query 1 -- This will return 5 "Word Count"
SELECT SUM(LENGTH(input) - LENGTH(REPLACE(input, ' ', '')) + 1) AS "Word Count" FROM
(SELECT TRIM(REPLACE(REPLACE(REPLACE(input,' ','<>'),'><',''),'<>',' ')) AS input
FROM (SELECT ' too late to the party ' AS input) i) r;
Query 2 -- This will return 13 "Word Count"
SELECT SUM(LENGTH(input) - LENGTH(REPLACE(input, ' ', '')) + 1) AS "Word Count"
FROM (SELECT ' too late to the party ' AS input) i;
-- breakdown ' too late to the party '
1 leading space= 1 word count
2 spaces after the first space from the word 'too'= 2 word count
1 space after the first space from the word 'late'= 1 word count
4 spaces after the first space from the word 'the'= 4 word count
trailing space(s) wasn't counted at all.
Total spaces > 1+2+1+4=8 + 5 word count = 13
因此,基本上,如果数据行之间甚至包含一百万个空格(免责声明:一种假设。我仅测试了336,896个空格),Query 1
仍将返回Word count = 5。
注意:我从这个答案https://stackoverflow.com/a/55476224/10910692中摘录的REPLACE(REPLACE(REPLACE(input,' ','<>'),'><',''),'<>',' ')
中段