Mysql中group by的问题。。
某草草
某草草 2017-05-18 10:52:23
[MySQL讨论组]

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

select * from user group by user_name;
某草草
某草草

全部回复(7)
怪我咯

首先理解下分组是个什么概念,分组后可以达到什么样的效果;
分组是为了按组这个属性进行统计分析;
例如一个学生表中,按性别分组,可以统计出男生多少人,女生多少人。
在查询结果列中,必然是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以后默认不能使用此中写法,会报错。
所以写之前先想想我需要通过分组统计什么内容,使用适合的聚合函数

天蓬老师

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

怪我咯
select * from user group by user_name;
//这么写其实也没问题 但是 实际上 你使用 group by 的时候 你需要用的 就只有 user_name 这个字段吧(通常来说)
//用什么字段就取什么字段就好。不一定要用 ‘*’ 用谁取谁就好
伊谢尔伦

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

黄舟

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

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

滿天的星座

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

给我你的怀抱

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号