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

如何用一条SQL查询统计同一表单列中含两个指定关键词的记录数量

单SQL统计含指定单词评论数实现方案

核心逻辑

采用条件聚合实现单次表扫描完成两项统计,性能远优于分开执行两次COUNT查询。

通用子串匹配写法(匹配任意包含love/hate子串的评论)

适用于不需要区分独立单词的场景,兼容绝大多数SQL数据库:

SELECT
  SUM(CASE WHEN Text LIKE '%love%' THEN 1 ELSE 0 END) AS love_review_count,
  SUM(CASE WHEN Text LIKE '%hate%' THEN 1 ELSE 0 END) AS hate_review_count
FROM Reviews;

独立单词精确匹配写法(排除lover/hated等包含子串但非独立单词的情况)

不同数据库的单词边界匹配语法略有差异,对应写法如下:

  • MySQL 版本
SELECT
  SUM(CASE WHEN Text REGEXP '[[:<:]]love[[:>:]]' THEN 1 ELSE 0 END) AS love_review_count,
  SUM(CASE WHEN Text REGEXP '[[:<:]]hate[[:>:]]' THEN 1 ELSE 0 END) AS hate_review_count
FROM Reviews;
  • PostgreSQL 版本(~*代表不区分大小写匹配,如需区分可替换为~)
SELECT
  SUM(CASE WHEN Text ~* '\mlove\M' THEN 1 ELSE 0 END) AS love_review_count,
  SUM(CASE WHEN Text ~* '\mhate\M' THEN 1 ELSE 0 END) AS hate_review_count
FROM Reviews;
  • SQL Server 版本
SELECT
  SUM(CASE WHEN Text LIKE '% love %' OR Text LIKE 'love %' OR Text LIKE '% love' OR Text = 'love' THEN 1 ELSE 0 END) AS love_review_count,
  SUM(CASE WHEN Text LIKE '% hate %' OR Text LIKE 'hate %' OR Text LIKE '% hate' OR Text = 'hate' THEN 1 ELSE 0 END) AS hate_review_count
FROM Reviews;

如果需要忽略大小写匹配,可将Text字段先转为小写再做匹配,示例:LOWER(Text) LIKE '%love%'。


内容的提问来源于stack exchange,提问作者Ivo van den Belt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:39:03