文章实例的数据表,来自上一篇博客《mysql简单查询》:http://blog.csdn.net/zuiwuyuan/article/details/39349611

一、 聚合函数

聚合函数,也叫做组合函数

求所有数据数

count不统计null ,统计的是记录数

SELECT COUNT(comm) FROM emp;     #  查询emp表comm的总数
SELECT COUNT(*) FROM emp; # 查询emp表行记录的总数
SELECT COUNT(DISTINCT deptno) FROM emp; # 查询不重复deptno的记录总数

求平均数,忽略空值

SELECT AVG(sal) FROM emp;
SELECT AVG(comm) FROM emp;   # 2200/4=550

求和

SELECT SUM(sal) FROM emp;

求最大值

SELECT MAX(sal) FROM emp;

#求最小值

SELECT MIN(sal) FROM emp;

二、 分组

Group by字句的真正作用在于与各种聚合函数配合使用,它用来对查询出来的数据进行分组

分组的含义是: 把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录

分组函数忽略空值

结果集隐式按升序排列,如果需要改变排序方式可以使用order by字句

/**
GROUP BY 可以根据你的分组条件对数据进行分组, 然后再进行统计
其实,我们对部门进行分组,然后统计出分组后的聚合值(平均、最大、最小等)
*/
#查询每个部门的平均工资
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;
#查询每个部门的员工数
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;

查询每个部门的整体工资情况

如果select语句中的列没有使用组函数,那么它就必须出现在group by字句中

而出现在group by字句中的列,不一定出现在select语句中

SELECT deptno ,AVG(sal),MAX(sal),MIN(sal),SUM(sal),COUNT(1)
FROM emp
GROUP BY deptno;
# 每个部门每个职位的平均工资
SELECT deptno,job,AVG(sal) FROM emp GROUP BY deptno,job;

三、 限定组的结果

HAVING字句用来对分组后的结果再进行条件过滤

# 查询部门平均工资大于2000的
# 分组后加条件: 使用having
# where和having都是用来做条件限定的,但是having只能用在group by之后
SELECT deptno ,AVG(sal),MAX(sal),MIN(sal),SUM(sal),COUNT(1)
FROM emp
# where AVG(sal)>2000; 此句会报错,因为在where字句中无法使用分组函数
GROUP BY deptno
HAVING AVG(sal)>2000;

where和having的区别:

where是在分组前进行条件过滤的

   having字句是在分组后进行条件过滤的

   where字句中不能使用聚合函数

   having字句中可以使用局和函数和一般过滤条件

四: 查询结果限定

在select语句最后可以使用limit来限定查询结果返回的起始记录和总数量

  select...limit offset_start,row_count;

  offset_start: 第一个返回记录行的偏移量,默认为0

  row_count: 要返回记录行的最大数目

SELECT * FROM emp LIMIT 5;    # 检索前五条记录
SELECT * FROM emp LIMIT 5,10; # 从第6行开始,记录行6-15(因为默认是0,所以此处的5只的是第六行记录)

mysql聚合函数和分组的更多相关文章

  1. 史上最全的mysql聚合函数总结(与分组一起使用)

    1.首先我们需要了解下什么是聚合函数 聚合函数aggregation function又称为组函数. 认情况下 聚合函数会对当前所在表当做一个组进行统计. 2.聚合函数的特点 1.每个组函数接收一个参 ...

  2. 第08章 MySQL聚合函数

    第08章 MySQL聚合函数 我们上一章讲到了 SQL 单行函数.实际上 SQL 函数还有一类,叫做聚合(或聚集.分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值. 1 ...

  3. MySQL聚合函数、控制流程函数(含navicat软件的介绍)

    MySQL聚合函数.控制流程函数(含navicat软件的介绍) 一.navicat的引入:(第三方可视化的客户端,方便MySQL数据库的管理和维护) NavicatTM是一套快速.可靠并价格相宜的数据 ...

  4. Django ORM 多对多操作 使用聚合函数和分组 F查询与Q查询

    创建表 # models.py form django.db import models class Book(models.Model): # 表名book,django会自动使用项目名+我们定义的 ...

  5. 【mysql】 mysql 子查询、联合查询、模糊查询、排序、聚合函数、分组----------语法

    第二章 mysql 一.模糊查询 like 1. 字段 like '河北省%' %代表任何N个字符 2 字段 like '河北省____' _代表任意1个字符 二.IN 语法:SELECT 字段列1, ...

  6. MySQL数据操作与查询笔记 • 【第6章 聚合函数和分组查询】

    全部章节   >>>> 本章目录 6.1 sum.max 和 min 聚合函数 6.1.1 聚合函数介绍 6.1.2 sum 函数 6.1.3 max/min 函数 6.2 a ...

  7. MySQL聚合函数与数据分组

    我们最常需要的是汇总数据而不是把他们实际检索出来 确定表中行数(或满足某个条件或包含某个特定值的行数) 确定表中行组的和 找出表列(或所有行或特定列)的最大值,最小值和平均值 聚集函数是运行在行组上, ...

  8. MySQL☞聚合函数/分组函数

    分组函数(聚合函数) 1.count(*/列名): a.*:求出该数据的总条数 select  count(*)  from 表名 b.列名:求出该列中列名不为null的总条数 select  cou ...

  9. MySQL 聚合函数(三)MySQL对GROUP BY的处理

    原文来自MySQL 5.7 官方手册:12.20.3 MySQL Handling of GROUP BY SQL-92和更早版本不允许SELECT列表,HAVING条件或ORDER BY列表引用未在 ...

随机推荐

  1. 微信小程序之组件开发中的基础知识

    跟着视频开始小程序的项目的开发,视频中这个小程序已经上线了,可以很好的看着小程序的界面进行开发,昨天看了一下具体的需求,觉得真的细节好多啊,而且其中设计的组件的思想也是很好的,能够很好的实现代码的复用 ...

  2. iOS项目转移到自动引用计数

    这里主要参考了Apple官方文档:Transitioning to ARC Release Notes 在支持iOS5的Xcode4中,创建项目会看到这样的选项: 这是iOS5的新特性,自动对象引用计 ...

  3. Pyhton AES_cbc解密

    最近很多朋友问我加密解密有没有啥好推荐的方式,一般对AES的加密解密方式直接用在线加密或者解密就行,我为了方便测试,将网址以python脚本的形式写了出来,很简单的东西,2分钟搞定,随手记录一下~~ ...

  4. PYTHON网络爬虫与信息提取[scrapy框架应用](单元十、十一)

    scrapy 常用命令 startproject  创建一个新的工程 scrapy startproject <name>[dir] genspider    创建一个爬虫         ...

  5. 如何合并两个git commit

    把你的修改stage之后运行: git rebase -i HEAD~2 然后把第二行的pick改成squash就ok啦 note: 同理,如果要合并多个commit,把后面的2改成你想要合并的com ...

  6. 【JZOJ4742】【NOIP2016提高A组模拟9.2】单峰

    题目描述 输入 输出 样例输入 2 样例输出 2 数据范围 解法 答案为2^(n-1),快速幂即可. 证明:显然峰值必定为n,那么对于其他n-1个数,要么放在峰值的左边,要么放在峰值的右边,所以方案数 ...

  7. day002--python编程的相关软件,变量

    --python是一门解释型语言,需要安装解释器,由于python3和python不兼容,所以需要安装这两个版本的解释器. 目前python2.7版本已经停止更新,使用企业较少,所以应当以学习pyth ...

  8. Failed to delete access_log

    重复build 关闭已经开启的tomcat    terminal 再次开启即可

  9. PHP:测试SQL注入以及防止SQL注入

    在写登录注册的时候发现了SQL和JS注入这个危害网站的用户举动: 测试方法: SQL注入: 先来做一个测试: 用户名:’ or 1 # 密码:随便写8位以上 验证码:写正确 好吧,就那么简单就进去了: ...

  10. javaweb学习总结(一) - - JSP取得绝对路径

    在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下: 例如: 1 <!--使用绝对路径的方式引入 ...