本文导读:在MYSQL中使用GROUP BY分组时,我们可以select 多个非聚合字段,但是这些字段不在GROUP BY中,这样的SQL查询在SQL SERVER、ORACLE中是不合理的,且会报错,MYSQL的这种特异性,有时查询出来的结果并不是我们需要的,那么,我们在使用时应该注意哪些呢?

一、下列语句在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    |    |     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  |       |     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

转载自:http://www.studyofnet.com/news/1233.html

MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项的更多相关文章

  1. 转:深入研究mysql中group by与order by取分类最新时间内容

    鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里, (不知道是不是现在水平的限制,总之我还没找到在用ContentProvider时可以使用子查询),主要方法是用SQL ...

  2. mysql中group by 的用法解析

    1. group by的常规用法 group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤. 假设现有数据库表如下 ...

  3. 深入研究mysql中group by与order by取分类最新时间内容

    鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用 ContentProvider时可以使用子查询),主要方法是用SQL ...

  4. MySQL 中的数据库名称、数据表名称、字段名称

    如何查询Oracle,Sql Server,MySQL 中的数据库名称.数据表名称.字段名称 分类: Database2012-09-24 22:16 7034人阅读 评论(0) 收藏 举报 数据库s ...

  5. MySQL中group by , sum , case when then 的使用

    在我们使用数据库的时候,可能会遇到需要进行统计的情况. 比如需要统计一下,下表中各个年份的胜负场数. 遇到这样的情况,我们应该怎么办呢? 在mysql中我们可以使用group by sum  case ...

  6. 在MySQL中group by 是什么意思

    mysql语法中group by是什么意思? 在百度中搜索半天,最后找到一篇解释比较好的(不是博文,是百度知道,很郁闷那么多网友怎么就没人解释的清楚),链接如下: http://zhidao.baid ...

  7. MYSQL中GROUP BY的细节及SELECT语句顺序

    一.GROUP BY语句的细节 我们知道,在sql中,GROUP BY语句主要用来给数据分组,以便能对每个组进行聚集计算,但是GROUP BY也有一些限制需要知道: 1. GROUP BY字句可以包含 ...

  8. mysql中group by和order by混用 结果不是理想结果(转)

    文章转自 https://www.cnblogs.com/myphper/p/3767572.html 在使用mysql排序的时候会想到按照降序分组来获得一组数据,而使用order by往往得到的不是 ...

  9. MYSQL 中GROUP BY

    group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...

随机推荐

  1. IntelliJ IDEA删除代码的注释

    由于反编译出的Java每一行都有注释,因此查找批量替换 搜索框,正则表达式 (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|[ \t]*//.*) 或者 (/\* ...

  2. WebGL常用数学公式

    1.三角函数 坐标轴采用右手法则,沿Z轴的逆时针方向为正角度,假设原始点为p(x,y,z),a是X轴旋转到点p的角度,r是从原始点到p点的距离.用这两个变量计算出点p的坐标,等式如下: x = rco ...

  3. 开发者如何更好的选择和适应NoSQL的5个阶段

    基本含义 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关 ...

  4. 如何在Linux系统中安装VMware

    首先打开vmware官网的下载链接:https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmware_works ...

  5. 随笔 -- IO -- Socket/ServerSocket -- Echo(BIO)实例

    随笔 -- IO -- Socket/ServerSocket -- 系统概述 Java中提供的专门的网络开发程序包------java.net Java的网络编程提供的两种通信协议:TCP和UDP ...

  6. Lab6: Paxos

    Introduction In labs 6 and 7, you will replicate the lock service using the replicated state machine ...

  7. NetBpm 安装篇(1)

    尊重别人劳动成果 转载注明出处:http://www.cnblogs.com/anbylau2130/p/3875718.html 官方主页 http://www.netbpm.org/docs/in ...

  8. java-使用SImpleDateFormat格式化时间输出

    之前有篇博客是使用NSDateFormatter来对时间进行格式化输出,但使用起来有点繁琐,今天介绍下最近刚刚使用的SimpleDateFormat. public class SimpleDateF ...

  9. Android中的安全与访问权限控制

    Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行.系统和应用之间的安全性是通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给 ...

  10. IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE

    本文转载至 http://blog.csdn.net/u014011807/article/details/40187737 在本卷你可以学到什么? 采用四种方法设计应用于各种场合的音频播放器: 基于 ...