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 统计表中出现的所有单词的主要内容,如果未能解决你的问题,请参考以下文章