MySQL筛选ColA='CityC'并统计ColB重复次数且保留所有匹配行
MySQL 查询实现:筛选指定ColA并统计ColB重复次数
方法一:使用窗口函数(MySQL 8.0及以上版本)
这种方法代码简洁高效,适合新版本MySQL:
SELECT ColA, ColB, ColC, COUNT(ColB) OVER (PARTITION BY ColB) AS TotalEach FROM CityCityStuff WHERE ColA = 'CityC';
说明:PARTITION BY ColB会将筛选出的ColA='CityC'的数据按ColB分组,每组内的每一行都会自动带上该组的总行数,也就是对应ColB的重复次数。
方法二:使用子查询关联(兼容所有MySQL版本)
如果你的MySQL版本不支持窗口函数,用这种关联查询的方式也能实现需求:
SELECT t1.ColA, t1.ColB, t1.ColC, t2.TotalEach FROM CityCityStuff t1 JOIN ( SELECT ColB, COUNT(*) AS TotalEach FROM CityCityStuff WHERE ColA = 'CityC' GROUP BY ColB ) t2 ON t1.ColB = t2.ColB WHERE t1.ColA = 'CityC';
说明:先通过子查询统计出ColA='CityC'范围内每个ColB的出现次数,再将这个统计结果和原表中符合条件的行通过ColB关联,最终得到包含原字段和统计列的结果。
内容的提问来源于stack exchange,提问作者Don E.
相关产品推荐
相关产品推荐

