Mysql中的group问题

如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,这句话怎么理解?

例子如下:

select length(name) as ln,count(*) from student a group by length(name) 

这个sql证明了你在select中写了使用函数处理的字段,就必须将其放入到group by 后面
原因是:
SQL解析语句时,顺序为:from > where > group > select > having > order by
当解析到group by的时候,select 后面的 字段无论添加 别名还是 用函数包裹起来,都不会被group识别,所以,必须遵循:
在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式

在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,这句话怎么理解?
回答: select substring(name,1,3) from table where id=xxxx group by substring(name,1,3) 就是这个意思

GROUP BY子句指示MySQL分组数据,简单来说就是对哪几个字段进行分组
例如

select  name , sum(salary)    from   student    group  by   name , grade     

按照名字和等级划分,查看相同名字下的工资总和,多个字段进行分组时,需要将name和grade看成一个整体,只要是name和grade相同的可以分成一组;如果只是name相同,grade不同就不是一组

分组查询,只能是查分组的这些字段,其他的字段必须使用聚合函数,否则就会报错


SELECT TYPE,COUNT(1),SUBSTR(START_DATE,1,6) FROM TABLE GROUP BY TYPE,SUBSTR(START_DATE,1,6)

GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚合函数)不能使用别名。
除聚合计算语句外,select语句中的每个列都必须在GROUP BY子句中给出。