MySQL:基础—数据分组


1.为什么要分组:


比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量。

如果只找一个商品的话,我想是很简单的。


但是我想要表达的是,我要统计每一个商品的订单数目,而不是单单一个。效果就像这样:


此时我们就要对订单信息分类(根据ID)聚集然后进行运算,这时我们要用到分组

说明:  

  使用分组可以将数据分为多个逻辑组,对每个组进行聚集计算。注意是先分为逻辑组,再进行聚集计算。

2.创建分组:
2.1语句:

  GROUP BY 子句
2.2根据单个条件分组:

  


2.3根据多个条件分组:

  


3.过滤分组:

3.1什么是过滤分组:
  我认为过滤分组表达的实质是先将记录按分组条件进行分组再根据过滤条件筛选这些分组,最后返回那些符合过滤条件的分组。
比如, 根据单个条件分组的 中,我们将每个ID的数目进行了统计输出,现在我只想要输出那些数目大于2的,就需要用到过
滤分组。

3.2HAVING语句:
  这条语句就是确定过滤条件的。
如上述所说,我们显示同一个ID的产品数目大于2的。



3.3HAVING与WHERE的关系:
  当我们使用时可能会有这种想法,为什么不用WHERE?那我们用WHERE试一试。

很明显语法出错,因为WHERE过滤指定的是行而不是分组。事实上,WHERE没有组的概念,而HAVING却恰恰相反。
我又有一个想法,我要进行的根据ID的分组是有条件的,比如某件商品虽然属于一个ID,但是我嫌它的价格便宜,我就不让它进行分组,这时WHERE就可以派上用场了。

有一条特性:

  WHERE是在分组前进行信息过滤的,HAVING则是分组后。

MySQL:基础—数据分组的更多相关文章

  1. mysql基础-数据类型和sql模式-学习之(三)

    0x01 mysql的两种方向: 开发DBA:数据库设计(E-R关系图).sql开发.内置函数.存储历程(存储过程和存储函数).触发器.时间调度器(event scheduler) 运维----> ...

  2. mysql基础,数据表的类型

  3. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  4. MYSQL基础笔记(四)-数据基本操作

    数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...

  5. MYSQL根据分类分组取每组一条数据且按条件能排序的写法

    之前在一个项目的开发中,有遇到要根据分类来分组获取每组一条按某个条件字段排序的数据结果,于是先自己写了一条语句: select * from `表A` GROUP BY `c`; 上面这个语句有可以根 ...

  6. MySQL数据分组Group By 和 Having

    现有以下的学生信息表: 若果现在想计算每个班的平均年龄,使用where的操作如下: SELECT Cno AS 班级, AVG(Sage) AS 平均年龄 FROM stu ; 这样的话,有多少个班就 ...

  7. MySQL对数据表进行分组查询

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  8. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  9. MySQL基础教程——创建数据库并插入数据

    本节将介绍 MySQL 新建数据库,新建表,插入数据以及基本数据类型的相关知识.本节实验将创建一个名为 mysql_shiyan 的数据库,其中有两张表 employee和 department. 1 ...

随机推荐

  1. C++ Builder平台使用Indy9开发自动FTP程序01

    Indy9与CB自带的Indy8不同处还是挺多的.首先就是图标变漂亮了,其次很多Method都重写了.它主要是依据Delph里的函数,力求与之相通.不同点在本系列的后续章节中会一一介绍. 在写ftp代 ...

  2. MyEclipse2014 安装SVN小工具

    1.下载svn小工具 下载链接:folderID=2240">http://subclipse.tigris.org/servlets/ProjectDocumentList?fold ...

  3. Linux命令语句秘籍

    系统管理命令 stat              显示指定文件的详细信息,比ls更详细 who               显示在线登陆用户 whoami          显示当前操作用户 host ...

  4. WebService客户端添加SOAPHeader信息

    通过JAXBContext创建Marshaller对头信息进行解析为dom,获取WSBindingProvider,使用Headers.creat()创建soap的Header元素: 另外就是:将us ...

  5. HTTP协议报文、工作原理

    一.web及网络基础       1.HTTP的历史            1.1.HTTP的概念:                 HTTP(Hyper Text Transfer Protocol ...

  6. 使用Jsoup实现java爬虫(非原创)

    1,查看页面源代码,使用css或者JQuery选择器方式或元素节点选择 例如: 或者写成:Elements elements1 = Jsoup.connect("http://jb.999a ...

  7. 5分钟入门自动化测试——你应该学会的Postman用法(2)

    前言 之前的一篇文章<你应该学会的Postman用法>,主要介绍了postman的一些高级的用法,便于日常开发和调试使用,本文的基础是对postman的基本使用以及一些高级用法有一定的了解 ...

  8. Python_oldboy_自动化运维之路_面向对象2(十)

    本节内容: 面向对象程序设计的由来 什么是面向对象的程序设计及为什么要有它 类和对象 继承与派生 多的态与多态性 封装 静态方法和类方法 面向对象的软件开发 反射 类的特殊成员方法 异常处理 1.面向 ...

  9. 使用CocoaPods来做iOS程序的包依赖管理

    前言 每种语言发展到一个阶段,就会出现相应的依赖管理工具, 或者是中央代码仓库.比如 Java: maven,Ivy Ruby: gems Python: pip, easy_install Node ...

  10. SUBSET

    DESCRIPTION:一开始你有一个空集,集合可以出现重复元素,然后有Q 个操作1. add s在集合中加入数字s.2. del s在集合中删除数字s.保证s 存在3. cnt s查询满足a& ...