一个sql:
select 
        a.year as year , c.name as area , sum(a.price) as price
from
        supor_new.tbl_product_core_list as a , supor_new.dict_terminal as b , supor_new.tree_areapp as c where
        a.terminal_num =b.terminal_num 
        and b.areapp=c.id
      
group by  c.name ,year上面这样写正确但如果写成group by area,year。出来的数据就不对了。不知道什么原因,请高手指点。谢谢!

解决方案 »

  1.   

    group by 是用来分组的,有一个前提就是有重复数据,在select 子句中只能有分组字段(也就是重复的字段)和统计函数。
    你的sql语句的order by中c.name ,year与select子句中a.year, c.name ,对应,该了别的当然就错了。
      

  2.   

    你看下 area 是不是其它表的什么字段。
    你现在是以 supor_new.tbl_product_core_list 的 year 
    和 supor_new.tree_areapp 的name来分组查询的、
      

  3.   

    dict_terminal 里有 area 如果group by area,year 的话,数据库是以dict_terminal里的area,和 year 分组?
      

  4.   

    没有什么原因,这个是由于SQL语句执行分析时的处理导致的。 MYSQL中它是先进行结果集的生成,然后再添加别名。而GROUP BY是生产结果集中的一个动作,所以无法使用别名。其它有些数据库,会在分析语句的时候进行这个变化处理,这样就可以在GROUP BY中使用别名了。
      

  5.   

    楼主的 area 在这里不是别名啊 是其它表的字段 要是其它表没有这个字段 应该会报错。
      

  6.   

    本来要结贴了,看了7楼的,又改了下sql:
    SELECT a.year AS year, c.name AS area_old, sum( a.price ) AS price
    FROM supor_new.tbl_product_core_list AS a, supor_new.dict_terminal AS b, supor_new.tree_areapp AS c
    WHERE  a.terminal_num = b.terminal_num
    AND b.areapp = c.id
    GROUP BY area_old, year发现是能查出来的(area_old 三个表里都没有这个字段,是别名),不会报错但是我知道了:如果select 里的别名和from 里的表里的字段相同的话,group by 里是对真实存在的字段进行分组。所以以后应该注意下