MySQL技术求助:编写INSERT查询统计mod分组连接数并插入目标表
解决分组统计后插入新表的SQL问题
没问题,这就帮你搞定这个SQL插入需求!
原表数据(假设原表名为source_table)
| id | mod | modele |
|---|---|---|
| 90 | act | gend |
| 22 | act | gend |
| 54 | act | ent |
| 53 | act | ent |
| 95 | act | genext |
| 61 | act | ent |
需求说明
需要将上述表按mod和modele字段分组统计记录数,然后插入到包含id、Mod、ConnMod、noConn字段的目标表中,预期插入结果如下:
预期插入结果
| id | Mod | ConnMod | noConn |
|---|---|---|---|
| 1 | act | gend | 2 |
| 2 | act | ent | 3 |
| 3 | act | genext | 1 |
解决方案SQL
情况1:目标表id为自增主键
如果目标表(假设名为target_table)的id字段是自增主键,数据库会自动生成序号,直接用下面的语句即可:
INSERT INTO target_table (Mod, ConnMod, noConn) SELECT mod AS Mod, modele AS ConnMod, COUNT(*) AS noConn FROM source_table GROUP BY mod, modele ORDER BY modele;
情况2:目标表id需要手动生成序号
如果id不是自增字段,用ROW_NUMBER()函数生成连续序号:
INSERT INTO target_table (id, Mod, ConnMod, noConn) SELECT ROW_NUMBER() OVER (ORDER BY modele) AS id, mod AS Mod, modele AS ConnMod, COUNT(*) AS noConn FROM source_table GROUP BY mod, modele ORDER BY modele;
注意事项
- 记得把语句中的
source_table替换成你原表的实际名称,target_table替换成目标表的实际名称; ORDER BY modele是为了让结果和你给出的预期顺序一致,如果不需要特定顺序可以去掉。
内容的提问来源于stack exchange,提问作者user2660409
相关产品推荐
相关产品推荐

