如何统计ID列中各ID的出现次数并存储至新列
解决方案:为每行添加对应ID的出现次数
没问题,我来帮你搞定这个需求!你之前用的SELECT COUNT(ID) AS Count FROM table之所以没达到效果,是因为这个语句要么返回整个表的ID总数,要么加上GROUP BY ID后只会返回每个ID一行的统计结果,但你需要的是保留原表的每一行数据,同时新增一列显示对应ID的总出现次数。
这里有两种常用的解决方案,根据你的数据库版本选择即可:
方法一:使用窗口函数(推荐,适用于MySQL 8+、PostgreSQL、SQL Server等现代数据库)
窗口函数可以直接在每行计算对应分组的统计值,写法非常简洁:
SELECT ID, COUNT(ID) OVER (PARTITION BY ID) AS Count FROM your_table_name;
PARTITION BY ID:将数据按ID分组,把相同ID的行归为一组COUNT(ID) OVER (...):计算每个分组内的行数,并且把这个结果赋值给分组内的每一行
运行这个查询后,就能得到你期望的结果:
ID Count
1 3
1 3
1 3
2 2
2 2
3 3
3 3
3 3
4 1
方法二:子查询关联(适用于不支持窗口函数的旧版本数据库,比如MySQL 5.x)
如果你的数据库不支持窗口函数,可以先通过子查询统计每个ID的次数,再通过JOIN关联回原表:
SELECT t1.ID, t2.id_count AS Count FROM your_table_name t1 INNER JOIN ( SELECT ID, COUNT(ID) AS id_count FROM your_table_name GROUP BY ID ) t2 ON t1.ID = t2.ID;
这个方法的逻辑是:先在子查询里统计每个ID的出现次数,然后把原表的每一行和对应的统计结果通过ID关联起来,从而让每行都能拿到对应ID的计数。
内容的提问来源于stack exchange,提问作者blaugrana
相关产品推荐
相关产品推荐

