如何修改SQL查询,合并相似术语行并汇总去重UUID计数?
解决方案
可以通过标准化values字段的方式合并重复术语,将重复的短语统一为标准表述后再分组统计。以下是两种可行的修改方案:
方案一:使用CASE语句精准匹配
适合已知所有重复术语的场景,逻辑清晰直观:
SELECT CASE WHEN values LIKE '%love it%' THEN 'love it' WHEN values LIKE '%hate it%' THEN 'hate it' WHEN values LIKE '%neutral%' THEN 'neutral' ELSE values -- 保留其他未匹配的内容(如有) END AS standardized_values, COUNT(DISTINCT uuid) AS count FROM `response_values` AS rv LEFT JOIN `responses_comprehensive` AS r ON r.question_id = rv.qid WHERE question_wording = "campaign rating" AND values NOT LIKE '%missing%' GROUP BY standardized_values
方案二:使用正则表达式处理重复
适合术语重复形式多样(带/不带空格重复)的场景,扩展性更强:
SELECT REGEXP_REPLACE(values, r'(love it|hate it|neutral)(\s*\1)+', r'\1') AS standardized_values, COUNT(DISTINCT uuid) AS count FROM `response_values` AS rv LEFT JOIN `responses_comprehensive` AS r ON r.question_id = rv.qid WHERE question_wording = "campaign rating" AND values NOT LIKE '%missing%' GROUP BY standardized_values
核心逻辑说明
- 先将包含重复术语的
values字段值,统一转换为标准术语(如love itlove it→love it、neutral neutral→neutral); - 基于标准化后的字段分组,汇总distinct uuid的计数,即可得到期望的合并结果。
内容的提问来源于stack exchange,提问作者abby
相关产品推荐
相关产品推荐

