SQL 统计表中出现的所有单词

Posted

技术标签:

【中文标题】SQL 统计表中出现的所有单词【英文标题】:SQL Count all word occurrences from a table 【发布时间】:2018-11-01 18:31:33 【问题描述】:

我正在尝试根据客户调查表创建词云。我想计算表中特定列中所有单词的出现次数。此列包含所有客户调查 cmets。我试图按照下面的说明进行操作,但无法弄清楚如何对所有客户 cmets 的所有单词进行编码和计数。

http://sqljason.com/2012/03/making-tag-cloud-with-s-s-rs-rich-text.html

对 SQL 有点陌生。

【问题讨论】:

您正在使用哪个版本的 SQL Server? 【参考方案1】:

最简单的方法是: 其中 Countwords = 要检查的列,WET 是您要计算的单词。

Select SUM(CTS) 'TotalOccurancesOfWord'
from
( 
SELECT LEN(countwords) - LEN(REPLACE(countwords, 'wet', '')) CTS
from #temp --table you are using
) a

另见:How to count instances of character in SQL Column

【讨论】:

【参考方案2】:

如果您正在使用 SQL Server 2016 或更高版本,以下内容可以为您解决问题:

SELECT 
        REPLACE(REPLACE(s.value, ',', ''), ' ', '') [Word]
      , COUNT(*) Occurrence

FROM  TableName t
           CROSS APPLY STRING_SPLIT( [Comments] , ' ') s

GROUP BY REPLACE(REPLACE(s.value, ',', ''), ' ', '')

如果您使用的是旧版本,早于 2016 年的 SQL Server,那么您将需要使用用户定义的 [Split String] 函数,网上有很多示例,只需 google 即可。但是您可以将上述查询与旧版本的 [Split String] 用户定义函数一起使用。

同样对于 s-s-rS 报告,我会根据需要使用此数据填充表格并将报告指向该表格,但不建议每次执行报告时都执行此命令。

【讨论】:

【参考方案3】:

我在 MS SQL 2012 和 2014 上对此进行了测试。

    --Create table
    DECLARE @t TABLE (RowNum int null, comments varchar(max))

    --Build table
    INSERT INTO @t
    (RowNum, comments)
    SELECT ROW_NUMBER() OVER(ORDER BY example.comment DESC) AS RowNum,
           REPLACE(REPLACE(example.comment, '!', ''), ',', '')  FROM
    (
    SELECT 'This website is awesome' AS comment UNION
    SELECT 'I like your website, however it could be better' UNION
    SELECT 'The menu button at the top is really nice!'
    )example

    --Show table
    SELECT * FROM @t

    --Setup vars
    DECLARE @i int = 1
    DECLARE @Count int = (SELECT COUNT(t.RowNum) FROM @t t)
    DECLARE @delimiter varchar(1) = ' '
    DECLARE @output TABLE(splitdata NVARCHAR(MAX))

    --Iterate through a table and build output table
    WHILE @i <= @Count
    BEGIN
        --Do something on one row at a time ie: WHERE(RowNum = @i)
        DECLARE @string varchar(max) = (SELECT t.comments FROM @t t WHERE(t.RowNum = @i))

        DECLARE @start int
        DECLARE @end int 
        SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
        WHILE @start < LEN(@string) + 1 BEGIN 
        IF @end = 0  
          SET @end = LEN(@string) + 1
          INSERT INTO @output (splitdata)  
          VALUES(SUBSTRING(@string, @start, @end - @start)) 
          SET @start = @end + 1 
          SET @end = CHARINDEX(@delimiter, @string, @start)
        END 
        SET @i = @i + 1 --Iterate i
    END

    --Show output table
    SELECT * FROM @output

    --Summarize words
    SELECT o.splitdata, COUNT(*) AS Cnt FROM @output o
    GROUP BY o.splitdata
    ORDER BY Cnt DESC

【讨论】:

以上是关于SQL 统计表中出现的所有单词的主要内容,如果未能解决你的问题,请参考以下文章

如何用python统计一个txt文件中各个单词出现的次数

指定文件目录遍历所有子目录统计文档的单词出现数量

Linux统计文件中单词出现的次数

单词统计

python怎么统计一句英语的单词数量并输出?

用python统计一段文本中单词出现的次数