求更有效率的mysql语句:Insert into 。。group by。。的多个结果到新表

rdfzfanghui 2015-08-17 10:46:22

我想把表2中的结果赋给表1
现在的语句比较冗余如下所示,求更有效率的语句,先谢谢各位高手了:
insert into `Table 1` (`Region`, `Group1`) /*插入group1
select * from
(
select `Region`,sum(`Criteria`) as Group1 from `Table2`
where `Criteria`="Group1"
group by `Criteria`
)var
on duplicate key update `Group1`=var.Group1

insert into `Table 1` (`Region`, `Group2`) /*插入group2
select * from
(
select `Region`,sum(`Criteria`) as Group2 from `Table2`
where `Criteria`="Group2"
group by `Criteria`
)var
on duplicate key update `Group2`=var.Group2

insert into `Table 1` (`Region`, `Group3`) /*插入group3
select * from
(
select `Region`,sum(`Criteria`) as Group3 from `Table2`
where `Criteria`="Group3"
group by `Criteria`
)var
on duplicate key update `Group3`=var.Group3
...全文
347 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rdfzfanghui 2015-08-18
  • 打赏
  • 举报
回复
非常感谢回复,我查了一下mysql manual, 上面说A LEFT [OUTER] JOIN can be faster than an equivalent subquery because the server might be able to optimize it better
rucypli 2015-08-17
  • 打赏
  • 举报
回复
Criteria上加索引
道玄希言 2015-08-17
  • 打赏
  • 举报
回复


insert into `Table 1` (`Region`, `Group1`, `Group2`, `Group3`, `Group4`)                      -- 插入group1
select Region, Group1, Group2, Group3, Group4 from
(
    select g.Region, g1.Group1, g2.Group2, g3.Group3, g4.Group4 from 
    (
        select `Region` from `Table2` 
        group by `Region`
    ) as g
    left join 
    (
        select `Region`, sum(`Criteria`) as Group1 from `Table2` 
        where `Criteria`="Group1"
        group by `Region`
    ) as g1
    on g.Region = g1.Region
    left join 
    (
        select `Region`, sum(`Criteria`) as Group2 from `Table2` 
        where `Criteria`="Group2"
        group by `Region`
    ) as g2
    on g.Region = g2.Region
    left join 
    (
        select `Region`, sum(`Criteria`) as Group3 from `Table2` 
        where `Criteria`="Group3"
        group by `Region`
    ) as g3
    on g.Region = g3.Region
    left join 
    (
        select `Region`, sum(`Criteria`) as Group4 from `Table2` 
        where `Criteria`="Group4"
        group by `Region`
    ) as g4
    on g.Region = g4.Region
) var
on duplicate key update 
`Group1`=var.Group1, `Group2`=var.Group2, 
`Group3`=var.Group3, `Group4`=var.Group4

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧