如何获取SQL Server中正面,中性和负面推文的总数?

时间:2017-07-04 15:11:07

标签: sql sql-server

我是一名新的SQL开发人员,我正在尝试编写一个查询来检索数据库中正,负和中性推文的总数。结果应如下所示:

  

PositivesCount --- NeutralCount --- NegativeCount

     

500 --- --- --- --- --- 700 --- --- --- --- 800

此查询中涉及的表的架构:

T_TweetSentiment Table: Id, TweetId, SentimentLabel, TypeId
T_Tweet Table: Id, TweetText 

T_TweetSentiment表包含三种不同的情绪标签;积极的,消极的和中立的。我想检索正面推文,中性推文和负推文的总数,如上图所示。 那么请你告诉我如何才能得到理想的结果?

这是我的查询,但它不起作用:

SELECT  MAX(CASE WHEN ts.SentimentLabel = 'Positive' THEN COUNT(ts.SentimentLabel) ELSE NULL END) AS PositivesCount, 
        MAX(CASE WHEN ts.SentimentLabel = 'Neutral'  THEN COUNT(ts.SentimentLabel) ELSE NULL END) AS NeutralsCount, 
        MAX(CASE WHEN ts.SentimentLabel = 'Negative' THEN COUNT(ts.SentimentLabel) ELSE NULL END) AS NegativeCount
FROM            dbo.T_TweetSentiment AS ts INNER JOIN
                         dbo.T_Tweet AS t ON ts.TweetId = t.Id
WHERE    ts.TypeId = 6

3 个答案:

答案 0 :(得分:4)

def log_out
  session.delete(:user_id)
  @current_user = nil
end

答案 1 :(得分:0)

为什么不使用:

SELECT COUNT(*), SentimentLabel 
FROM SentimentLabel
GROUP BY SentimentLabel

答案 2 :(得分:0)

我不明白你为什么需要forT_tweet似乎没必要:

JOIN

您需要加入的唯一原因是SELECT SUM(CASE WHEN ts.SentimentLabel = 'Positive' THEN 1 ELSE 0 END) as PositiveCount, SUM(CASE WHEN ts.SentimentLabel = 'Neutral' THEN 1 ELSE 0 END) as NeutralCount, SUM(CASE WHEN ts.SentimentLabel = 'Negative' THEN 1 ELSE 0 END) as NegativeCount FROM dbo.T_TweetSentiment ts WHERE ts.TypeId = 6; 中的TweetId不在推文表中。这似乎不太可能(并且会表明数据设计存在问题)。