首页  >  问答  >  正文

Mysql中group by的问题。。

Mysql中,下面这样的写法是可以允许的。但是严不严谨,支不支持这样写?有疑惑过不去这个坎,请大家帮忙看看。

select * from user group by user_name;
某草草某草草2712 天前703

全部回复(9)我来回复

  • 怪我咯

    怪我咯2017-05-18 10:54:23

    最详细的文档说明在官网上找到了。

    MySQL 5.7.5及以上版本实现了函数依赖检测。如果启用 ONLY_FULL_GROUP_BY SQL 模式(默认情况下),MySQL 将拒绝选择列表、HAVING 条件或 ORDER BY 列表引用既未在 GROUP BY 子句中命名也不在功能上依赖于它们的非聚合列的查询。 (5.7.5之前,MySQL不检测函数依赖,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前行为的描述,请参阅MySQL 5.6参考手册。)

    来源:https://dev.mysql.com/doc/ref...

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-18 10:54:23

    select中的字段需要在group by中强制写出来
    select user_name from user group by user_name;

    http://blog.csdn.net/u2830560...

    回复
    0
  • 怪我咯

    怪我咯2017-05-18 10:54:23

    首先理解下分组是个什么概念,分组后可以达到什么样的效果;
    分组是为了按组这个属性进行统计分析;
    例如一个学生表中,按性别分组,可以统计出男生多少人,女生多少人。
    在查询结果列中,必然是sum,count等聚合函数组成。例如:
    select count(*),sex from student group by sex;
    如果是select * from user group by user_name;是想要得到一个什么样的统计结果呢?
    mysql5.6默认可以使用这种写法select * from user group by user_name,但实际上在内部对语句做过转换;
    mysql5.7以后默认不能使用此中写法,会报错。
    所以写之前先想想我需要通过分组统计什么内容,使用适合的聚合函数

    回复
    0
  • 天蓬老师

    天蓬老师2017-05-18 10:54:23

    在SQL语句中使用GROUP BY要注意三点
    1:不能使用别名;
    2:除了函数字段,select中出现的字段都必须出现在group by中,
    3:别名不能使用保留字
    这三点MYSQL都是没有要求的!
    我们再来看你这个语句,如果user表只有一个字段user_name ,那么这个语句没有问题,
    如果user表有超过一个字段,那么这个语句在mysql是没有问题的,但是在oracle和sqlserver是有问题的

    回复
    0
  • 怪我咯

    怪我咯2017-05-18 10:54:23

    雷雷

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-18 10:54:23

    如果存在user_name这个字段,那么就没有问题。group by是按字段分组,通常和聚合函数一起使用,像你这个sql也是可以执行的。只不过user_name通常都是唯一的,按唯一字段去分组是没有意义的。

    回复
    0
  • 黄舟

    黄舟2017-05-18 10:54:23

    这个属于mysql的特殊功能支持,如@xuexiphpa所说,可以通过参数关掉。

    但不建议使用,group by分组后,理论上返回的记录数比分组前少了,一般会通过聚合函数来返回一些统计数据。
    直接使用select *,就不确认返回的是那一条记录了。

    回复
    0
  • 滿天的星座

    滿天的星座2017-05-18 10:54:23

    一般个聚合函数结合用的比较多

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-18 10:54:23

    group by聚合分组后,select子句中的元素最好只保持:
    1、常数
    2、group by指定的列名
    3、聚合函数,如count()、avg()、sum(*)等等

    你这样*的结果,只列出了每一个分组的一条记录,而且不知道是第一个还是是随机的一个值

    回复
    0
  • 取消回复