MySQL学习记录--分组与聚集
一、group by 子句
group by 字句可对数据进行分组。
以MySQL5.5的sakila数据库中的film数据表举例:查找出各个电影等级的电影总数
mysql>SELECT rating, COUNT(*) AS ratingCount FROM film
> GROUP BY rating
结果如下:

可以看出,group by 子句对其后接的字段进行了分组,而这里也用了聚集函数count()对各分组中的项目数进行统计。
二、聚集函数
由上例可以知道,聚集函数是对某个分组的所有行执行特定的操作。下面介绍一些通用的聚集函数:
MAX() : 返回集合中的最大值
MIN() :返回集合中的最小值
AVG() : 返回集合中的平均值
SUM() : 返回集合所有值之和
COUNT() : 返回集合的总条数
还是以film 数据表举例:注:length字段在数据表中代表电影时长
mysql> select max(length),
-> min(length),
-> avg(length),
-> sum(length),
-> count(*)
-> from film;
结果以下

聚集函数可以创建参数表达式,可以根据需要任意增加复杂度,只需要保证最后返回一个数字、字符串或日期即可。
三、聚集函数对null值的处理
sum()、avg()、max()函数都会忽略分组集合中的null值。需要注意,count(字段)是对分组集合中的个数统计,会忽略null,而count(*)表示统计分组集合的行数,不会忽略null。
四、having 子句
先看例子:查找出各个电影等级的电影总数且总数大于200
mysql> SELECT rating, COUNT(*) AS ratingCount FROM film
-> GROUP BY rating
-> WHERE ratingCount>200;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that -- 报错
corresponds to your MySQL server version for the right syntax to use near 'WHERE
ratingCount>200' at line 3
查询的where 子句中不能包含聚集函数,这是因为where 子句是在分组前执行的,服务器此时还不能对分组执行任何函数。因此,可用having 子句使用聚集函数进行过滤数据
mysql> select rating, count(*) as ratingCount from film
-> group by rating
-> having ratingCount>200;
+--------+-------------+
| rating | ratingCount |
+--------+-------------+
| PG-13 | 223 |
| NC-17 | 210 |
+--------+-------------+
2 rows in set (0.00 sec)
五、分组查询中的where 和 having
当在包含group by子句的查询中增加过滤条件时,需要考虑过滤是针对原始数据(此时过滤条件应放在where 子句中),还是针对分组后的数据(此时过滤条件应放到having 子句中)。
MySQL学习记录--分组与聚集的更多相关文章
- 我的MySQL学习记录 完结篇DAY05~
课程已全部学完,Redis\mongoDB 的学习也会提上日程啦~剩下的最大的最大的问题在于练习,大量的练习,后期会发我的学习记录. 小记:也不知道是不是加强针的缘故,老是拉肚子,记录彻底感冒的一天, ...
- Mysql 学习记录
( xampp 的mysql 与 直接用 dnf 安装的 mysql 有冲突! ) 1. 数据库基本知识: 一张表的行 又称为 记录 一张表的列 又称为 字段 表结构:所有字段,规定了你的每一条记录所 ...
- mysql学习记录
干净卸载mysql:https://blog.csdn.net/cxy_summer/article/details/70142322mysql 解压缩版安装说明:https://jingyan.ba ...
- MySQL学习记录一
1.MySQL join操作 left join以左表为基础,其记录会全部表示出来,而右表只显示满足搜索条件的记录.right join以右表为基础,其记录会全部显示出来,而左表只显示满足搜索条件的记 ...
- mysql学习记录,CASE WHEN THEN ELSE END用法
记mysql,case when then else end用法 用法1:搜索函数 SELECT r.order_no, r.golds, r.pay_tool, , ) ) END AS price ...
- MySQL学习记录(导入Excel表到数据库,并筛选条件输出)
附上:重置mysql账号密码方法 ubuntu系统下mysql重置密码和修改密码操作 - skh2015java的博客 - CSDN博客(改完重启,登录mysql要root/sudo权限) Cento ...
- mysql学习记录(一)
#打开MySQL服务 sudo service mysql start #Ubuntu Linux 安装配置MySQL #安装MySQL服务器,核心程序 sudo apt-get install my ...
- MySQL学习记录--操作时间数据
1.返回日期的时间函数 date_add() : 可以为指定日期增加/减少任意一段时间间隔.下面举例将当前日期增加一个月和减少一个月 mysql month) as add_one_month; +- ...
- MySQL学习记录--生成时间日期数据
时间数据格式组件: 组件 定义 范围 YYYY 年份,包括世纪 1000~9999 MM 月份 01(January)~12(December) DD 日 01~31 HH 小时 00~23 HHH ...
随机推荐
- windows编程环境
自行下载VS2010官方原版并破解你也可以从微软官方直接下载VS2010 正式版,然后自行破解.Microsoft Visual Studio 2010官方下载地址如下:页面:http://www.m ...
- web学习之Django--安装
前提有python,easy_install 关于easy_install 的安装,比较简单的装法 : wget -q http://peak.telecommunity.com/dist/ez_se ...
- javascript 使用方法名作为参数
Example <!DOCTYPE html> <html lang="en"> <head> <meta charset="u ...
- [课程设计]Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面)
Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...
- delphi强制WebBrowser控件使用指定版本显示网页
function TFrmmain.WriteAppNameToReg:Boolean; var reg:TRegistry; sPath,sAppName:String; Sver:string; ...
- H5+CSS3做图片轮播滚动效果
HTML代码部分: <div id="wrap"> <ul id="list"> <li>10</li> < ...
- stm8的IIC库的使用
一.前言 stm8是一款低功耗的MCU芯片,它具备stm32库函数和资源丰富的优势.也同时具有价格便宜,低功耗的特点.在一些项目中,能起到很好的作用.下面我介绍一下stm8的IIC硬件库函数驱动代码及 ...
- win7安装oracle11g64位提示环境变量Path长度超出
解决办法:安装包以管理员方式运行
- js手风琴
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- python之RabbitMQ
一.安装RabbitMQ 1. 安装erlang 1 2 3 4 tar xf otp_src_18.3.tar.gz cd otp_src_18.3 ./configure --prefix=/ma ...