一条分组排序语句的构思

  为了抽取各单位8月的合同制总人数,因为我本身对复杂的语句编写速度慢,对方急着要,所以只好老老实实一个单位一个单位的进行SUM,执行了19条语句,终于得到自己想要的结果了,算算时间,也花了将近半小时,由于以后的工作中,每个月都需要单位人数,所以,我只好想办法设计一条分组语句,不然光核对结果,就需要执行19条语句,相当不方便。
   表:ABC ,字段有:dwdm(单位代码)、dwmc(单位名称)、nd(年)、yf(月份)、 htrs(合同制人数)、 pqrs(派遣制人数)、 fy(费用)。姑且就假设为这样吧。第一次使用的语句:
 select  sum(htrs) from ABC where nd=2013 and yf=08 and dwdm=1234;
第二次自己改良的语句:
select  dwmc,sum(htrs) from ABC where nd=2013 and yf=08 and dwdm in (1234,456,789,....) group by dwmc;
筛选出来的数据单位编码混乱,不方便操作,不过效率绝对提神了1000%。接下来该怎样才能对单位代码进行排序呢,先是在分组前进行嵌套语句排序,如下:
  select  dwmc,sum(htrs) from (select * from ABC where nd=2013 and yf=08 and dwdm in (1234,456,789,....) order by dwdm) group by dwmc;
 最终以失败告终,不过仔细一看,这条语句的执行效率,在数据量少的时候看不出来,在数据量大的时候,效率特低。
里面嵌套失败,那么在外面嵌套结果如何呢? 于是我设计了第四条语句:
select * from (select  dwmc,sum(htrs) from ABC where nd=2013 and yf=08 and dwdm in (1234,456,789,....) group by dwmc) order by dwdm;  此次终于获得我想要的结果了。
呵呵,大功告成,以后每个月可以省半个小时了。


你可能感兴趣的:(排序,分组)