其实准确的意思,应该是:如果一列在聚合函数中,那么就可以不出现在 group by,其实更准确的说,这个字段本身如果不在group by中,那么这个字段只能 在聚合函数中。显然上面的例子,programtime没有在group by,那么只能在min函数中:MIN(programtime) 

解决方案 »

  1.   

    其实更准确的说,这个字段本身如果不在group by中,那么这个字段只能 在聚合函数中。书上说的,不够准确把。显然上面的例子,programtime没有在group by,那么只能在min函数中:MIN(programtime) 
      

  2.   

    把你的语句改成这样:select programtype,MIN(programtime) from programinfo
     group by programtype
     
     --或者
     select programtime,MIN(programtime) from programinfo
     group by programtime不过第二种改法只是语法正确,没有什么意义的,会列出所有的programtime这个列的值。
      

  3.   

    就是呀,我把programtime放在了min函数中了,为什么还是错误?
      

  4.   

    尽信书不如无书,按照书中的理解来说,它已经将select后是某一字段col,然后聚合函数里又出现col的这种情况排除了,因为本身没有任何意义,即使语法正确。在实际遇到的情况里一般都是按照某个维度去分组,求的某些指标的最大最小和等聚合后的指标值,它解释的也就是这种情况下,该如何正确运用聚合函数及group by分组。
      

  5.   

    就是呀,我把programtime放在了min函数中了,为什么还是错误?你这么写肯定会报错的,书上的话写的不够准确。应该是,如果一列不在group by,那么这一列只能在聚合函数中,而你的programtime列,不在group by中,虽然在聚合函数中,但是:select programtime,MIN(programtime) from programinfo
    group by programtype紫色的在聚合函数中,而红色的还是不在聚合函数中啊,所以就报错了
      

  6.   

    就是呀,我把programtime放在了min函数中了,为什么还是错误?你这么写肯定会报错的,书上的话写的不够准确。应该是,如果一列不在group by,那么这一列只能在聚合函数中,而你的programtime列,不在group by中,虽然在聚合函数中,但是:select programtime,MIN(programtime) from programinfo
    group by programtype紫色的在聚合函数中,而红色的还是不在聚合函数中啊,所以就报错了
    谢谢你啊~真是高手!佩服!
      

  7.   

    对于没被聚合函数处理的字段, group by 中有的  select后面必须有 
    比如 select a,b,c from T group by a,b,c至于在聚合函数中的字段,group by 中是不用包含的
    比如 select a,b,c,min(d),max(e) from T group by a,b,c