MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项
类别:数据库 浏览量:2206
时间:2016-4-27 MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项
MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项一、下列语句在MySql中是合规的
select count(1),task_type,status from action where biz_date='20141014' group by status
select count(1),task_type from action where biz_date='20141014' group by status
二、使用时易出现的问题
1、实例数据
mysql> select * from test;
+----+-------+------+-------+
| id | name | age | class |
+----+-------+------+-------+
| 1 | qiu | 22 | 1 |
| 2 | liu | 42 | 1 |
| 4 | zheng | 20 | 2 |
| 3 | qian | 20 | 2 |
| 0 | wang | 11 | 3 |
| 6 | li | 33 | 3 |
+----+-------+------+-------+
6 rows in set (0.00 sec)
2、找到每个class里面的最大的age的基本信息
如下的sql语句,则输出结果不准确
mysql> select id,name,max(age),class from test group by class;
+----+-------+----------+-------+
| id | name | max(age) | class |
+----+-------+----------+-------+
| 1 | qiu | 42 | 1 |
| 4 | zheng | 20 | 2 |
| 0 | wang | 33 | 3 |
+----+-------+----------+-------+
3 rows in set (0.00 sec)
备注
虽然找到的age是最大的age,但是与之匹配的用户信息却不是真实的信息
原因
如果 id,name 不能唯一确定的话,mysql会随机选一行做为值。
三、使用是注意事项
1、这个写法不标准, 因为假如没group的字段如果有多个值, 可能导致这个字段会有不确定的值,且不利于数据库移植
2、假如可以确定这个字段都是重复的值(譬如多表联接), 那就没有这方面的困扰,反而会简化SQL语句,也有可能会提高性能,可以推荐这种方式查询
例如
select A.id, B.desc, B.XXX, B.YYY SUM(A.AMT)
FROM A
join b on a.id=b.id
where a.id=? and b.xxx=?
group a.id
标签:mysql
您可能感兴趣
- mysql索引详解及基本用法(Mysql普通索引与唯一索引的选择详析)
- 在mysql语法中用来修改数据的命令(explain命令为什么可能会修改MySQL数据)
- mysql双主状态不一致(MySQL GTID主备不一致的修复方案)
- mysqldump属于哪种备份(MySQLDump的备份小技巧)
- django连接mysql不支持中文插入(Django创建项目+连通mysql的操作方法)
- mysql8.0.12安装教程图解(mysql 8.0.22 zip压缩包版免安装下载、安装配置步骤详解)
- mysqlcount使用技巧(MySQL巧用sum、case和when优化统计查询)
- 常用的mysql查询语句(MySQL查询重写插件的使用)
- mysql数据库与表的基本操作总结(Mysql、Oracle中常用的多表修改语句总结)
- MySQL中使用mysqldump命令备份
- mysql数据库基本增删改查基本语句(MySQL表的增删改查基础教程)
- centos系统mysql安装及连接教程(CentOS8安装SQLServer2019的过程)
- mysql 自定义排序
- mysql创建表的基本步骤(mysql中操作表常用的sql总结)
- 如何打开mysql8.0客户端服务(MySQL mysqladmin客户端的使用简介)
- mysql语句性能分析(聊聊MySQL的COUNT*的性能)
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
- 一课译词 放鸽子(一课译词放鸽子)
热门推荐
- dedecms怎么设置栏目(DEDECMS实现在标签中嵌套调用SQL的方法)
- sqlserver存储删除过程(Sql中存储过程的定义、修改和删除操作)
- css三栏布局详解(CSS三列布局的多种表现形式)
- dockertomcat多开实例(Docker tomcat的设置内存大小配置方式)
- docker容器关闭后怎么启动(docker批量启动关闭所有容器的操作)
- python实用教程(Python简直是万能的,这5大主要用途你一定要知道!推荐)
- mysql双主状态不一致(MySQL GTID主备不一致的修复方案)
- dedecms添加模板(dedecms正文自动排版插件 伪原创站必备)
- sqlserver字段说明(详解SQL Server 中 JSON_MODIFY 的使用)
- linq not in 查询
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9