Oracle 和Mysql Group by的细节与坑

>分组函数使用位置:

无论是Mysql还是Oracle,都不允许在where中使用分组函数;

对于from语句组装好的原生的语句,可以直接看作一大组,在select语句中直接进行组函数运算;

从sql的执行顺序上说,在where中再使用分组函数筛选原始的一大组也是不合理的;

 

>分组函数中的列,与select语句中单独出现的列

对于

select u.lastname,avg(u.sal.)

from user u

group u.lastname;

这种写法两种都支持;

而对于

select u.lastname,avg(u.sal.),u.firstname

from user u

group u.lastname;

对于Mysql来说只是avg()返回的单行结果,和分组后数据第一行firstname的拼接;

但是Oracle中会报错:不是Group by表达式;

因为Oracle中规定:对于select中单独出现的列(不是写在组函数中,如u.firstname),一定要出现再后面的group by中,否则报错;但是出现再group by中的列,不一定要出现再前面的select中;

补充:对于group by多个列,是将多个列拼起来,再根据拼接结果分组;与distinct 多个列;相似。

你可能感兴趣的:(数据库)