select Areacode,sum(Number) as Number
    from (select Areacode,sum(Number) as Number from 表一 group by Areacode
          union all
          select Areacode,sum(Number) as Number from 表二 group by Areacode) as a
    group by Areacode

解决方案 »

  1.   

    看来我要对nononono说yesyesyesyes了
      

  2.   

    select Areacode,sum(Number) as Number
        from (select * from 表一 
              union all
              select * from 表二 ) as a
        group by Areacode
      

  3.   

    select Areacode,sum(Number) as Number
        from (select Areacode,Number from 表一
              union all
              select Areacode,Number from 表二 ) as a
        group by Areacode这样的速度会快一些,不用进行多次汇总。
      

  4.   

    to gzhughie(hughie) 不一定吧?我认为没有区别。
      

  5.   

    当然有区分,数据库在做查询计划的时候,第一种情况,要多做一步,就是要先对两个表进行分组汇总(虽让对两个表的分组汇总是并行的,但是要等到他们都进行完后,才能接着做下一步,他们会占机器的内存,和CPU,数据量大的时候,会很慢的),然后再对两个表关联,最后再对处理后的表进行分组汇总。
    而下面的方法,第一步进行关联,然后就是分组汇总,等到结果。
    你觉得这两种语句,那个快?
      

  6.   

    那种速度快要根据数据的情况来区分。1. 如果Areacode的值少而表中的记录多,则下面的快, 因为大量记录的求和可以使用索引。select Areacode,sum(Number) as Number
        from (select Areacode,sum(Number) as Number from 表一 group by Areacode
              union all
              select Areacode,sum(Number) as Number from 表二 group by Areacode) as a
        group by Areacode2. 如果Areacode的值的数量与表中的记录数相差不大,可以考虑
    select Areacode,sum(Number) as Number
        from (select * from 表一 
              union all
              select * from 表二 ) as a
        group by Areacode
      

  7.   

    当然有区别
    上面的语句,数据库的查询计划会多出一步
    1、对两个表进行分组会中
    2、对汇总的结果关联
    3、对关联的结果在进行分组汇总
    下面的语句
    1、对汇总的结果关联
    2、对关联的结果在进行分组汇总
    虽让上面的语句查询计划只多出一步,但是同样会占内存与CPU,而且分组汇总本身就是一个耗时的查询,在数据量大的时候,会有明显的速度问题。
    你仔细想想,做一次和做两次同样的工作,那个快,那个慢?
      

  8.   

    select Areacode,sum(Number) as Number
        from (select * from table1
              union all
              select * from table2) a
        group by Areacode
      

  9.   

    gzhughie(hughie),没看明白我的意思?要不要我给你举个例子?
      

  10.   

    tiger_qi(老虎)说的对,最简单又可理解得方法是:
    建立一个临时表(无主键),将表1、表2的数据全部导入临时表,剩下的问题就是个分组求和的问题了。简单吧!
      

  11.   

    nononono(null,null) 我没白你的意思,你是说表中重复的纪录多,汇总在关连会快一些。
    但现在不是做JION的关联,而是union all,不是实际的字段关联,而是虚拟的相加,不论你记录多,还是记录少,都是一样的付加,可能纪录多时,附加的速度会慢一些,可是慢这一点速度,要比分组汇总少的多,这样的操作,你觉得那种快。
      

  12.   

    嘻 错别字 应该是
    nononono(null,null) 我明白你的意思。嘻嘻