MySQL之GROUP BY用法误解

1.说明mysql

   “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分红若干个“小区域”,而后针对若干个“小区域”进行数据处理。(只是简单说明这个语句的做用,不是这篇文章的重点)sql

2.使用举例:函数

  2.1表结构类型blog

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是否会正常执行呢?rem

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.分析ast

     这是什么状况?不是说若是select指定的字段要么出如今GROUP BY里面要么出如今聚合函数里面呢?我上面的SQL 没有在GROUP BY里面指定相应的字段也是能够正常执行的啊!!!原来我查过MYSQL的官方文档才知道:若是select指定的字段没有在GROUP BY 里面,那么必定要保证的是他们这些字段都直接依赖与GROUP BY后面的字段。好比first_name,last_name都依赖主键actor_id,因此上面的结果是OK的。class

5.扩展

  须要指出的在MYSQL中,当没法使用索引的时候,GROUP BY 使用两种策略来完成:使用临时表或者文件排序来分组。(其余。。。。。。。。)

相关文章
相关标签/搜索