mysql 与 oracle 比较group by 容易产生的误解

group by :

(1)oracle 中,总所周知,select (查询字段) from table1 group by column1 ,column2,,,,,,

其中查询字段只能是column1,column2,,,,,,和其他列的聚合函数,其中红色字体要完全一致,

(2)但是在mysql中,当查询字段未出现在group by 后面的字段,竟然也可以执行。如下例:

SELECT
    CODE,
    NAME,
    kindergartenCode,
    gradeCode
FROM
    t_class
WHERE
    isDelete = 0
AND NAME = '大一班999989'
GROUP BY
    kindergartenCode,
    gradeCode
ORDER BY
    id DESC

运行结果:

看到上面的结果,似乎对oracle的规定表示怀疑,可是经过仔细分析,运行sql:"select * from t_class where name='大一班999989' and kindergartenCode='1cd3b2a04fe1470fbc999989' and gradeCode='4'",结果如下:

可以发现,其实表中是有两行记录的,但是按照上面分组后只返回了一条记录,显然是不正确的,因此,无论是mysql ,还是oracle ,一定要注意,使用了group by 语句后,前面select 出的列,要么是分组的列,要么是其他列的聚合函数,这样结果集才准确

原文地址:https://www.cnblogs.com/zhangpeng8888/p/11066850.html