如何将GROUP BY查询结果插入另一张表的对应列中
实现方案
要将table A的数据转换并插入到table B中,你可以通过聚合函数+条件判断构造目标数据集,再通过INSERT INTO ... SELECT语句完成插入,具体步骤如下:
1. 构造目标查询语句
首先编写SQL查询,计算出table B需要的平均值和各状态的计数:
SELECT AVG(grade) AS `avg(grade)`, COUNT(CASE WHEN status = 'one' THEN 1 END) AS one, COUNT(CASE WHEN status = 'two' THEN 1 END) AS two, COUNT(CASE WHEN status = 'three' THEN 1 END) AS three FROM tableA;
AVG(grade):计算所有grade的平均值,对应table B的avg(grade)列COUNT(CASE ...):通过条件判断筛选对应status的记录,统计每个状态的出现次数(COUNT会忽略NULL值,不匹配的CASE返回NULL,不会被计入统计)
2. 插入到table B
如果table B已经存在,直接执行插入语句:
INSERT INTO tableB (`avg(grade)`, one, two, three) SELECT AVG(grade), COUNT(CASE WHEN status = 'one' THEN 1 END), COUNT(CASE WHEN status = 'two' THEN 1 END), COUNT(CASE WHEN status = 'three' THEN 1 END) FROM tableA;
如果table B尚未创建,先创建表结构(以MySQL为例):
CREATE TABLE tableB ( `avg(grade)` DECIMAL(10,2), one INT, two INT, three INT );
注意事项
- 不同数据库的特殊列名转义符不同:MySQL用反引号
`,PostgreSQL用双引号"",SQL Server用方括号[],根据你使用的数据库调整即可 - 如果需要定期更新table B的数据,可以先执行
TRUNCATE TABLE tableB清空旧数据,再执行上述插入语句
内容的提问来源于stack exchange,提问作者backend developer
相关产品推荐
相关产品推荐

