mysql group by first_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 使用两种策略来完成:使用临时表或者文件排序来分组。(其他。。。。。。。。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值