MySQL查询需求:查找含指定关键词的对象并统计数量,筛选CTN超3次
解决MySQL统计含关键词且被超3个对象共享的CTN问题
看来你是想搞定两个核心需求:找出包含特定关键词的CTN,同时只保留那些被超过3个对象共享的CTN,还要统计对应对象数量对吧?我来帮你修正和完善SQL语句,一步步来:
1. 先统计符合条件的CTN及其对象数量
你之前的语句没成功用COUNT,大概率是因为没按CTN分组——直接加COUNT会把所有符合条件的对象算成一个总数,而不是按每个CTN单独统计。正确的写法应该是用GROUP BY分组,再用HAVING筛选数量超3的CTN:
SELECT o.CTN, COUNT(o.object) AS object_count FROM object o WHERE o.CTN LIKE '%keyword%' GROUP BY o.CTN HAVING COUNT(o.object) > 3;
代码解释:
WHERE o.CTN LIKE '%keyword%':先过滤出包含目标关键词的CTN记录GROUP BY o.CTN:按CTN分组,把同一个CTN的所有对象归为一组COUNT(o.object):统计每组内的对象数量(如果object字段可能为空,想用总行数的话可以换成COUNT(*))HAVING COUNT(o.object) > 3:只保留对象数量超过3的CTN分组
2. 如果需要获取这些CTN对应的所有对象记录
如果你不仅要统计数,还想拿到每个符合条件的对象具体信息,可以用子查询或者JOIN关联:
方式一:用子查询(直观易懂)
SELECT o.object, o.CTN FROM object o WHERE o.CTN IN ( -- 先筛选出符合条件的CTN集合 SELECT CTN FROM object WHERE CTN LIKE '%keyword%' GROUP BY CTN HAVING COUNT(object) > 3 );
方式二:用JOIN(大表下效率更高)
SELECT o.object, o.CTN FROM object o JOIN ( -- 先筛选出符合条件的CTN集合 SELECT CTN FROM object WHERE CTN LIKE '%keyword%' GROUP BY CTN HAVING COUNT(object) > 3 ) AS filtered_ctns ON o.CTN = filtered_ctns.CTN;
这两种写法都会返回所有属于“含关键词且被超3个对象共享”的CTN的对象记录。
内容的提问来源于stack exchange,提问作者hopeless_user
相关产品推荐
相关产品推荐

