MySQL之GROUP BY用法误解
1.说明
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。(只是简单说明这个语句的作用,不是这篇文章的重点)
2.使用举例:
2.1表结构类型
mysql> desc actor;
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| actor_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| first_name | varchar(45) | NO | | NULL | |
| last_name | varchar(45) | NO | MUL | NULL | |
| last_update | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+----------------------+------+-----+-------------------+-----------------------------+
4 rows in set (0.00 sec)
2.2使用:
mysql> select first_name,last_name from actor group by first_name,last_name;
+-------------+--------------+
| first_name | last_name |
+-------------+--------------+
| ADAM | GRANT |
| ADAM | HOPPER |
| AL | GARLAND |
| ALAN | DREYFUSS |
| ALBERT | JOHANSSON |
| ALBERT | NOLTE |
| ALEC | WAYNE |
| ANGELA | HUDSON |
| ANGELA | WITHERSPOON |
| ANGELINA | ASTAIRE |
| ANNE | CRONYN |
| AUDREY | BAILEY |
| AUDREY | OLIVIER |
| BELA | WALKEN |
| BEN | HARRIS |
| BEN | WILLIS |
| BETTE | NICHOLSON |
| BOB | FAWCETT |
| BURT | DUKAKIS |
3.其他
我们知道在很早之前接触到GROUP BY 的时候就被告知,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。正如上面的使用方法那样,那我能不能在select后面的字段显示出来而不包括在GROUP BY 字段里。看看下面的SQL是否会正常执行呢?
mysql> select first_name,last_name from actor group by actor_id;
结果可能出乎你的意料之外,来看看执行结果:
mysql> select first_name,last_name from actor group by actor_id;
+-------------+--------------+
| first_name | last_name |
+-------------+--------------+
| PENELOPE | GUINESS |
| NICK | WAHLBERG |
| ED | CHASE |
| JENNIFER | DAVIS |
| JOHNNY | LOLLOBRIGIDA |
| BETTE | NICHOLSON |
| GRACE | MOSTEL |
| MATTHEW | JOHANSSON |
| JOE | SWANK |
| CHRISTIAN | GABLE |
| ZERO | CAGE |
| KARL | BERRY |
| UMA | WOOD |
| VIVIEN | BERGEN |
| CUBA | OLIVIER |
| FRED | COSTNER |
| HELEN | VOIGHT |
| DAN | TORN |
| BOB | FAWCETT |
| LUCILLE | TRACY |
| KIRSTEN | PALTROW |
| ELVIS | MARX |
4.分析
这是什么情况?不是说如果select指定的字段要么出现在GROUP BY里面要么出现在聚合函数里面呢?我上面的SQL 没有在GROUP BY里面指定相应的字段也是可以正常执行的啊!!!原来我查过MYSQL的官方文档才知道:如果select指定的字段没有在GROUP BY 里面,那么一定要保证的是他们这些字段都直接依赖与GROUP BY后面的字段。比如first_name,last_name都依赖主键actor_id,所以上面的结果是OK的。
5.扩展
需要指出的在MYSQL中,当无法使用索引的时候,GROUP BY 使用两种策略来完成:使用临时表或者文件排序来分组。(其他。。。。。。。。)
MySQL之GROUP BY用法误解的更多相关文章
- mysql group by 用法解析(详细)
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- (转载)mysql group by 用法解析(详细)
(转载)http://blog.tianya.cn/blogger/post_read.asp?BlogID=4221189&PostID=47881614 mysql distinct 去重 ...
- mysql笔记--group by,limit用法
table: id tag status a b c d 一.group by用法 .与count 联合计数 select status,count(*) from table group by st ...
- 转:mysql group by 用法解析(详细)
group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...
- Python操作MySQL -即pymysql/SQLAlchemy用法
本节介绍Python对于MySQL的一些操作用法 模块1:pymysql(等同于MySQLdb) 说明:pymysql与MySQLdb模块的使用基本相同,学会pymysql,使用MySQLdb也就不是 ...
- mysql distinct&group by 应用
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- mysql中explain的用法
mysql中explain的用法 最近在做性能测试中经常遇到一些数据库的问题,通常使用慢查询日志可以找到执行效果比较差的sql,但是仅仅找到这些sql是不行的,我们需要协助开发人员分析问题所在,这就经 ...
- analyticdb(ADB) group by 用法小结
虽说analyticdb(ADB)是支持mysql协议的,但有些具体细节用法是有些区别. 1.group by 字段 mysql group by select id,title,describe w ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
随机推荐
- 国内Android应用推广的六大主流方式
国内Android应用推广的六大主流方式 http://mobi.baike.com/article-19433.html 随着Android市场份额的飞速增长,越来越多的国内开发团队和公司開始投入A ...
- hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量
3081 意甲冠军: n女生选择不吵架,他甚至男孩边(他的朋友也算.并为您收集过程).2二分图,一些副作用,有几个追求完美搭配(每场比赛没有重复的每一个点的比赛) 后.每次增广一单位,(一次完美匹配) ...
- SpringMVC源代码深度分析DispatcherServlet核心的控制器(初始化)
SpringMVC是非常优秀的MVC框架,每一个框架都是为了我们提高开发效率,我们试图通过对SpringMVC的源码去了解这个框架,了解整个设计思想,框架要有扩展性,这里用的比較多是接口和抽象,是框架 ...
- Suse发生了错误Access denied for user ''@'localhost' to&
好久没实用MySQL了,上次由于装了Banq的论坛系统.在用MySQL Administrator进去的时候居然提示mysql error number 1045 access denied for ...
- "伪中国移动client"--伪基站诈骗
一.简单介绍: 近日,百度安全实验室发现一款"伪中国移动client"病毒.犯罪分子通过伪基站方式大量发送伪10086的短信,诱导用户点击钓鱼链接:并在钓鱼页面诱导用户输入网银账号 ...
- 实现键值对存储(三):Kyoto Cabinet 和LevelDB的架构比較分析
译自 Emmanuel Goossaert (CodeCapsule.com) 在本文中,我将会逐组件地把Kyoto Cabinet 和 LevelDB的架构过一遍.目标和本系列第二部分讲的差点儿相 ...
- 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境
搭建前须要下载的软件包(默认已搭建好cocos2d-x而且可在VS上执行,本人VS版本号为2013): 1:java 下载地址:http://www.java.com/zh_CN/download/m ...
- Bootstrap(2)整体架构
Bootstrap(2)整体架构 大多数Bootstrap的使用者都认为Bootstrap只提供了CSS组件 和JavaScript插件,其实CSS组件和JavaScript插件只是Bootstrap ...
- 浅析Java中的final关键字(转)
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下 ...
- 比ORA-24777: 我不使用不可移植数据库链接更郁闷的事情达成一致
现场有一个同步误差,内容如下面: java.sql.BatchUpdateException: ORA-24777: 不同意使用不可移植的数据库链路 at oracle.jdbc.driv ...