一、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学习记录--分组与聚集的更多相关文章

  1. 我的MySQL学习记录 完结篇DAY05~

    课程已全部学完,Redis\mongoDB 的学习也会提上日程啦~剩下的最大的最大的问题在于练习,大量的练习,后期会发我的学习记录. 小记:也不知道是不是加强针的缘故,老是拉肚子,记录彻底感冒的一天, ...

  2. Mysql 学习记录

    ( xampp 的mysql 与 直接用 dnf 安装的 mysql 有冲突! ) 1. 数据库基本知识: 一张表的行 又称为 记录 一张表的列 又称为 字段 表结构:所有字段,规定了你的每一条记录所 ...

  3. mysql学习记录

    干净卸载mysql:https://blog.csdn.net/cxy_summer/article/details/70142322mysql 解压缩版安装说明:https://jingyan.ba ...

  4. MySQL学习记录一

    1.MySQL join操作 left join以左表为基础,其记录会全部表示出来,而右表只显示满足搜索条件的记录.right join以右表为基础,其记录会全部显示出来,而左表只显示满足搜索条件的记 ...

  5. 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 ...

  6. MySQL学习记录(导入Excel表到数据库,并筛选条件输出)

    附上:重置mysql账号密码方法 ubuntu系统下mysql重置密码和修改密码操作 - skh2015java的博客 - CSDN博客(改完重启,登录mysql要root/sudo权限) Cento ...

  7. mysql学习记录(一)

    #打开MySQL服务 sudo service mysql start #Ubuntu Linux 安装配置MySQL #安装MySQL服务器,核心程序 sudo apt-get install my ...

  8. MySQL学习记录--操作时间数据

    1.返回日期的时间函数 date_add() : 可以为指定日期增加/减少任意一段时间间隔.下面举例将当前日期增加一个月和减少一个月 mysql month) as add_one_month; +- ...

  9. MySQL学习记录--生成时间日期数据

    时间数据格式组件: 组件 定义 范围 YYYY 年份,包括世纪 1000~9999 MM 月份 01(January)~12(December) DD 日 01~31 HH 小时 00~23 HHH ...

随机推荐

  1. Visual Studio 2015 显示正忙 正在等待内部操作完成

    网上查到的: 1.关闭IntelliTrace 2.进入项目文件夹有.vs的隐藏文件夹,进去找到和项目一样的名字的文件夹,再找v14文件夹,进去,删掉.suo文件 http://www.cnblogs ...

  2. MyBatis foreach标签遍历数组

    有时候开发中需要根据多个ID去查询,可以将ID封装为List或者数组然后使用MyBatis中的foreach标签构建in条件. 这里我将ID封装为String[]作为参数. <select id ...

  3. JavaScript高级程序设计 读书笔记 第二章

    <script>元素 直接在页面中嵌入JavaSript代码或包含外部JavaSript文件. 在代码中任何地方不能出现</script>,可通过转义字符'\'解决. 在XHT ...

  4. js判断输入时间是否大于系统时间

    validator.js中添加验证 beforeCurrentTime : {// 时间不能大于当前时间 validator : function(value) { var myDate = new ...

  5. java开发中中文乱码总结

    1.jsp页面内容显示乱码 这种乱码原因很简单,一般的工具或解码程序对中文字符解析时采用默认的解码方式: <%@ page contentType="text/html; charse ...

  6. java反射类内容获取

    private void DtoReflect(Object obj, MqDto mqDto) throws Exception { Map map = getMap(mqDto); if(obj= ...

  7. 完整安装cocoaPods

    cocoaPods是一款xcode项目管理第三方库的工具 *ruby源码镜像下载:https://ruby.taobao.org/mirrors/ruby/*升级gem的版本: $sudo gem u ...

  8. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  9. 关于APP程序员泡沫经济

    这些年,移动互联网非常火,火到掀起学习iOS.安卓以及H5的热潮.有人将这些新技术作为自己的实力补充,增加竞争力:更多的人将它们作为主业,专职做移动开发.但是,即便有移动开发人员不断涌入,对整个行业来 ...

  10. JSP Filter用法

    1.filter的作用 在HttpServletRequest请求到达Servlet之前,拦截客户的HttpServletRequest 根据需要检查HttpServletRequest的相关信息,修 ...