2016-07-27 95 views
0

我有一个包含数千个关键字的表。我想分离出该表中排名前25位的负面关键字,然后从这些关键字创建一个连接来查找与另一个表中的关键字关联的句子。最终结果将为id_file,sentence_id,sentiment,sentence,token。两个表都有令牌。SQL Server从另一个表中的一个表中选择最高记录

令牌表(tbl_token)具有以下的列:

id_file, sentence_id, sentiment, token 

的过滤器,以隔离从tbl_token顶部25如下:

id_file = 3, sentiment = 'negative' 

语句表(tbl_sentence)具有以下各栏:

id_file, sentence_id, sentiment, **sentence**, token 

两个表中的sentence_id都有一对多的关系,所以加入这些关系就会把句子拉出来。来自顶部查询的令牌存在于tbl_sentence中。

我现在的解决方案是首先运行tbl_token的前25位,对于上面的相同过滤器,计数令牌,按降序排序。

SELECT TOP (25) 
    COUNT(token) AS Count, token 
FROM 
    tbl_token 
GROUP BY 
    token, sentiment, id_file 
HAVING  
    (sentiment = N'negative') AND (id_file = 3) 
ORDER BY 
    COUNT(token) DESC 

然后我把它链接到一个视图中的所有令牌,其中有sentence_id。然后,我可以将sentence_id从视图链接到tbl_sentence,以根据前25个否定关键字分隔句子。

这个工程,但我只是想知道这是否可以在一个存储过程中完成。

+0

只是告诉你want..thanks –

回答

0

这是一个简单的查询,使用SELECT TOPINNER JOIN。你有没有研究JOINS?另外,你确定你不是指一对多吗?如果令牌出现在多个句子中,那么您只会获得指定的前25个结果,而不是前25个令牌的多个匹配。 ORDER BY是相对重要的,因为除非您指定排名顺序,否则排名前25并不总是处于可预测的顺序。

SELECT TOP 25 
    ts.id_file, 
    ts.sentence_id, 
    ts.sentiment, 
    ts.sentence, 
    ts.token 
FROM 
    tbl_token tt 
    INNER JOIN tbl_sentence ts on ts.sentence_id=tt.sentence_id 
WHERE 
    tt.id_file=3 
    AND 
    tt.sentiment='negative' 
ORDER BY 
    tt.SomeFieldToRank25ByDateOrPriority 

编辑为一对多!

SELECT 
    ts.id_file, 
    ts.sentence_id, 
    ts.sentiment, 
    ts.sentence, 
    ts.token 
    SentenceCount=COUNT(*) 
FROM 
( 
    SELECT TOP 25 
     tt.sentence_id 
    FROM 
     tbl_token tt 
    WHERE 
     tt.id_file=3 
     AND 
     tt.sentiment='negative' 
    ORDER BY 
     tt.SomeFieldToRank25ByDateOrPriority 
)AS X 
INNER JOIN tbl_sentence ts on ts.sentence_id=x.sentence_id 
GROUP BY 
    ts.id_file, 
    ts.sentence_id, 
    ts.sentiment, 
    ts.sentence, 
    ts.token 
+0

通常我会通过令牌的数量排序的结果,所以不会这需要通过令牌的递减次序的计有一组。以上不会隔离数以千计的前25个关键字。我添加了今天使用的前25个查询(参见上文)。 – Rob

+0

我很困惑。如果你的意思是一个标记可以用多个句子,那么你将需要从前25个子查询中选择,然后与其他表中的内部联接。 –

+0

代币在那里各自的列。是的,目前我有一个子查询,然后一个视图来查找句子。我想摆脱这种观点,如果可能的话,速度是可以的,但我可以拥有数百万条记录,并且这种观点可能会减慢速度。 – Rob

相关问题