You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL按日期分组统计sentiment字段取值计数以生成情感趋势对比数据

按日期维度统计三类情感计数的SQL实现

核心实现逻辑为条件聚合行转列,按日期分组后对每类情感单独计数,无匹配记录时自动补0,输出结果可直接对接后续可视化需求。

通用兼容写法(适配所有主流关系型数据库)

将代码中的表名替换为你实际存储textid、sentiment、date三个字段的表名即可运行:

SELECT
    date,
    SUM(CASE WHEN sentiment = 'positive' THEN 1 ELSE 0 END) AS countPositive,
    SUM(CASE WHEN sentiment = 'neutral' THEN 1 ELSE 0 END) AS countNeutral,
    SUM(CASE WHEN sentiment = 'negative' THEN 1 ELSE 0 END) AS countNegative
FROM text_data -- 替换为实际表名
GROUP BY date
ORDER BY date;

示例数据对应的输出结果

datecountPositivecountNeutralcountNegative
2018-10-22100
2019-11-30010
2019-12-29001
2020-01-02112
2021-03-10001
2021-08-10001

简洁语法版本(适配PostgreSQL、SQLite 3.30+、DuckDB等支持FILTER子句的数据库)

逻辑和通用版本完全一致,可读性更强:

SELECT
    date,
    COUNT(*) FILTER (WHERE sentiment = 'positive') AS countPositive,
    COUNT(*) FILTER (WHERE sentiment = 'neutral') AS countNeutral,
    COUNT(*) FILTER (WHERE sentiment = 'negative') AS countNegative
FROM text_data -- 替换为实际表名
GROUP BY date
ORDER BY date;

注意事项

  • 字符串匹配为大小写敏感逻辑,如果实际存储的情感值大小写和示例不一致,需要同步调整匹配条件,或通过LOWER(sentiment) = 'positive'这类写法统一转换为小写后匹配,避免漏统计
  • 如果需要调整统计粒度(比如按周、按月汇总),仅需将GROUP BY date中的日期字段替换为对应粒度的截取结果即可,例如MySQL按统计月的写法为GROUP BY DATE_FORMAT(date, '%Y-%m'),PostgreSQL按统计月的写法为GROUP BY DATE_TRUNC('month', date)

内容的提问来源于stack exchange,提问作者Renato Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 14:24:10