根据sql统计提及次数

hs1ihplo  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(376)

抱歉,如果这是一个重复的东西,我没有找到答案,特别是做了我想要的。
我正在尝试编写一个sql查询,它将返回数据集中某个候选行上包含积极、消极或中立情绪的行数。
这里有一个截图供参考

情绪是一个栏目,但它的价值观定义推特是积极的,消极的,或中立的。我的目标是让查询返回如下内容

如果有人能给我举个例子说明如何做到这一点,我将不胜感激!

cpjpxq1n

cpjpxq1n1#

在查询中使用特定的count()函数。

SELECT name as `Candidate Name`, 
    COUNT(CASE WHEN sentiment='Negative' THEN 1 END) AS `Negative`,
    COUNT(CASE WHEN sentiment='Positive' THEN 1 END) AS `Positive`,
    COUNT(CASE WHEN sentiment='Neutral' THEN 1 END) AS `Neutral`,
    COUNT(*) AS `Total`

FROM [table]

GROUP BY candidate
slhcrj9b

slhcrj9b2#

我喜欢用if()或case when来解决这类问题。轴心点有时很费时思考。

SELECT
  Name as CandidateName,
  SUM(IF(Sentiment = 'N', 1, 0)) as Negative,
  SUM(IF(Sentiment = 'Y', 1, 0)) as Positive,
  SUM(IF(Sentiment = 'N', 1, 0)) as Neutral
  COUNT(*) as Total
FROM [TABLE]
GROUP BY
  Name

要使用t-sql,或者只使用case when,相同的代码可能如下所示:

SELECT
  Name as CandidateName,
  SUM(CASE WHEN Sentiment = 'N' THEN 1 ELSE 0 END) as Negative,
  SUM(CASE WHEN Sentiment = 'Y' THEN 1 ELSE 0 END) as Positive,
  SUM(CASE WHEN Sentiment = 'N' THEN 1 ELSE 0 END) as Neutral
  COUNT(*) as Total
FROM [TABLE]
GROUP BY
  Name

相关问题