Mysql中group by的问题。。
某草草
某草草 2017-05-18 10:52:23
0
9
700

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

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

全部回复(9)
刘奇

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

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...

给我你的怀抱

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

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

刘奇

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

Peter_Zhu

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

刘奇

雷雷

伊谢尔伦

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

黄舟

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

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

滿天的星座

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

给我你的怀抱

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!