本帖最后由 huawenxue 于 2012-10-31 20:05:26 编辑

解决方案 »

  1.   

    单列的话没必要显式写上group by
      

  2.   

    SELECT AVG(年龄)
    FROM [教工$] 
    WHERE 所在系=@某系 可以这么来理解.不分组只是算总的而已.
      

  3.   


    本人刚开始学习,见笑了各位,我刚才突然想到了一点,我想得到的解答是是不是这个代码中的有些语句被重发执行了很多次?(我的意思是想得到整个代码的执行过程)
    我刚刚想到了一点(可能我原先的理解不正确,现在的理解不知道正确不正确)如下:
    我原来以为以下代码是整体一起执行的:
    (SELECT AVG(年龄)
    FROM [教工$] 
    WHERE 所在系=A.所在系)
    也就是说这段代码一次性执行完毕(跟A.所在系都比较一遍)
    而实际上不是这样的,应该是跟上面的完整代码一起执行一次以后,再比较A.所在系的第二个值,是不是这样的)如下:
    SELECT 教工号,姓名,课程号,所在系,性别,年龄
    FROM [教工$] A
    WHERE (SELECT AVG(年龄)
    FROM [教工$] 
    WHERE 所在系=A.所在系) >
    (SELECT AVG(年龄) 
    FROM [教工$] )
    ORDER BY 教工号
    那么换句话说一下代码执行了很多次?(可以计算)
    SELECT 教工号,姓名,课程号,所在系,性别,年龄
    FROM [教工$] A这个代码也执行了很多次,而不是一次?
    (SELECT AVG(年龄) 
    FROM [教工$] )
    请高手解答,小弟不才,谢谢
      

  4.   

    (SELECT AVG(年龄) 
     FROM [教工$] )
    SELECT 教工号,姓名,课程号,所在系,性别,年龄
     FROM [教工$] A
    这两个已经分别查询出两个个结果集,何来重复,不过看你那段代码,有点标新立异的写法,个人不喜欢
      

  5.   

    谢谢解答,再问一下:
    WHERE 所在系=A.所在系
    是不是执行一次,也就是说跟A.所在系的第一个值比较一次,然后上面的SELECE 就查询出一些符合条件的信息
    ,然后再跟A.所在系的第二个值进行比较,然后再SELECT选取一次,……以此类推是吗?
      

  6.   

    WHERE 所在系=A.所在系 这个一次性把符合条件的数据全部查出来。
      

  7.   

    谢谢提供调试方法,我马上自己试一试。
    关键是我这个是在EXCEL中写的SQL,不是在其他平台写的,所以是无法调试的
    看来是把数据放到SQL SERVER中调试了
      

  8.   

    晕,都没发现是excel里面的sql
      

  9.   

    一次性执行完毕的话,内部建立了很多虚拟表?
    哎,还是明天安装个SQL SERVER 来调试一下,看一下整个过程,这个还真没注意呢呵呵
      

  10.   

    你的虚拟表何来?sql是面向集合的操作哦》。。尽量不要一行一行处理。