日期:2014-05-19  浏览次数:20677 次

group by 问题
大家好,我在做GROUP   by的时候出现的问题,我要求
select   a,b,c,sum(num)   group   by   a,b   其中c如果不加入汇总字段,就出现问题,但是加进去,又很耗时,请问有什么好的解决办法,我的字段要可能不至3个,select   a,b,c,e,f,g   ,sum(num)   group   by   a,b   是不是必须要在后面加入所有的字段啊

------解决方案--------------------
select b.C_CODE , b.C_NAME , SUBSTRing(b.F_CODE,P_NSTYLSTAR,P_NSTYLLEN) FA_CODE , b.F_NAME FA_NAME , b.F_PRICE FA_PRICE , a.NUM_1 , a.SUM_1 from percur1 b inner join (select c_code,f_code,sum(num_1) num_1,sum(num_1*f_price) sum_1 from percur1 group by c_code,f_code) a on b.c_code=a.c_code and b.f_code=a.f_code

试下这个,不过,我不知道速度怎样。呵呵

------解决方案--------------------
从算法上来说,以上都对

不过,如果就这么几个字段,恐怕挪2、3个字段到子查询效率方面不会差太多。如果这样差别大的话,就应该在表结构设计上进行拆分(话外~)

况且,SUBSTRing(F_CODE,P_NSTYLSTAR,P_NSTYLLEN),我怀疑SUBSTRing(F_CODE,P_NSTYLSTAR,P_NSTYLLEN)相同的情况下F_CODE是不是也相同。如果不同,就要考虑对结果进行过滤或者在内层子查询就要SUBSTRing()了。。。