我是一名新的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
答案 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)
我不明白你为什么需要for
。 T_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
不在推文表中。这似乎不太可能(并且会表明数据设计存在问题)。