按空格分组值并计算它们

时间:2011-07-19 10:35:34

标签: sql sql-server tsql

我有一个表格,其中包含为客户提供的消息,我基本上需要查找最常用单词的前50个列表。

该表名为Messages,键入的消息为Message。实际上,我希望SELECT所有行,按空格递归地分割每个Message以获取所有单词,每个单词GROUP BYCOUNT。我正在努力通过空间递归分裂 - 任何想法?

1 个答案:

答案 0 :(得分:3)

DECLARE @Table TABLE (userID INT,MESSAGE NVARCHAR(MAX))
INSERT INTO @Table
SELECT '1','word1 word2 word3' UNION ALL
SELECT '1','word2 word5 word4' UNION ALL
SELECT '2','word5 word2 word1' UNION ALL
SELECT '2','word1 word2 word3'

; WITH c AS(
SELECT N.Value,COUNT(N.Value) Cnt FROM 
@Table T
CROSS APPLY
dbo.split(T.message,' ') N
GROUP BY N.Value
)
SELECT  c.Value,c.Cnt
FROM    c
ORDER BY Cnt DESC

结果:

enter image description here

注意:您需要拆分功能,您可以在Internet的众多示例中找到它。例如,请看这里:Split function equivalent in T-SQL?