这一章节主要讲了三方面的内容:

  1. 数据的汇总操作
    a. 聚合函数
    b.分组操作
  2. 给汇总操作指定条件
  3. 对汇总结果进行排序

COUNT()等聚合函数

定义:

输入多行,输出一行的函数称为聚合函数

功能:

用于对数据进行汇总,如:

  1. COUNT: 计算表中的记录数( COUNT(*) 的时候为所有行的行数, COUNT(<column>)的时候是不包含 NULL 时候的行数.
  2. SUM: 计算数值列中的合计值(提前将 NULL 排除)
  3. AVG:计算数值列中的平均值(提前将 NULL 排除)
  4. MAX: 求任意列中数据的最大值
  5. MIN: 求任意列中数据的最小值

格式:

SELECT SUM(<column-name>)
FROM <tablename>;

其中 column-name 为函数的参数,
其前可加关键词 DISTINCT, 用于合并相同的数据

GOURP BY 子句 & 聚合键

定义:

现将表分组,然后进行汇总操作,这一过程需要 GROUP BY 子句.
GROUP BY 中指定的列称为「聚合键」,其中值为 NULL 的数据单纯列为一列.

格式:

SELECT <column1>, <column2>,<column3>,....
FROM <tablename>
GROUP BY <column1><column2>,<column3>...

其他问题

问题1

同时包含 WHERE, GROUP BY 子句的时候,先运行 WHERE 子句对数据进行过滤.
具体顺序如下:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. SELECT

问题2

GROUP BY 与 DISTINCT 的区分

  1. 当想要计算汇总结果的时候,用 GROUP BY
  2. 当想要合并数据的时候用 DISTINCT

问题3

把聚合键之外的列名写在 SELECT 子句中
问题原因:
聚合键和其他列名并不是一对一的

规定: 有聚合键的 SELECT 语句,只能包含:常数、聚合函数、聚合键

HAVING 子句 & 为汇总指定条件

定义:

在对数据分组之后,得到其聚合函数的值, HAVING 子句可以特定分组的值.

格式:

SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type
HAVING COUNT(*) = 2;

HAVING 子句中可包含常数、聚合函数、聚合键

ORDER BY 子句 & 排序键

定义:

在对数据进行查询之后,对数据进行排序的语句为 ORDER BY ;
ORDER BY 中书写的列名叫做「排序键」,其规则如下:

  1. 可指定多个排序键,按优先顺序从高到低排序
  2. 在最后添加 ASC\DESC 关键字可指定升序\降序.
  3. 排序后, NULL 数据位于表的末尾

总结

汇总的语法顺序为:
SELECT--->FROM-->WHERE-->GROUP BY-->HAVING-->ORDER BY

汇总的执行顺序为:
FROM-->WHERE-->GROUP BY-->HAVING-->SELECT-->ORDER BY

由此产生的特殊问题

由于别名是在 SELECT 语句中执行的,在它之前的语句,比如 GROUP BY 就不能使用别名;在其之后的语句,ORDER BY 可以使用别名.

《SQL 基础教程》第三章:聚合和排序的更多相关文章

  1. [SQL基础教程] 3-1 对表进行聚合查询

    [SQL基础教程] 3-1 对表进行聚合查询 聚合函数 用于合计的函数称为聚合函数或者集合函数 COUNT SUM AVG MAX MIN SELECT COUNT(*) FROM table; SE ...

  2. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  3. [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY

    [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY ORDER BY SELECT <列名1>,<列名2>,<列名2>... FROM ORDER B ...

  4. 《SQL 基础教程》第二章:查询基础

    这一章的结构如下: SELECT 语句基础 算术运算符和比较运算符 逻辑运算符 SELECT 语句可用于查询数据,并且可以设定条件来查询具有特定值的记录.条件的设定就需要算数运算符.比较运算符和逻辑运 ...

  5. 《SQL 基础教程》—第一章:数据库与 SQL

    导言 这一章的内容如下: 数据库简介 SQL 概要 表的创建 表的删除与更新 数据库简介 定义: Database, 是大量数据的集合Database Management System,是用于管理数 ...

  6. python基础教程-第三章-使用字符串

    本章将会介绍如何使用字符串何世华其他的值(如打印特殊格式的字符串),并简单了解下利用字符串的分割.联接.搜索等方法能做些什么 3.1 基本字符串操作 所有标准的序列操作(索引.分片.乘法.判断成员资格 ...

  7. 《SQL基础教程》

    Product表 CREATE TABLE Product (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, prod ...

  8. SQL基础教程(第2版)第3章 聚合与排序:3-2 对表进行分组

    第3章 聚合与排序:3-2 对表进行分组 ● 使用GROUP BY子句可以像切蛋糕那样将表分割.通过使用聚合函数和GROUP BY子句,可以根据“商品种类”或者“登记日期”等将表分割后再进行汇总.● ...

  9. SQL基础教程(第2版)第3章 聚合与排序:3-4 对查询结果进行排序

    第3章 聚合与排序:3-4 对查询结果进行排序 ● 使用ORDER BY子句对查询结果进行排序.● 在ORDER BY子句中列名的后面使用关键字ASC可以(通常省略默认)进行升序排序,使用DESC关键 ...

随机推荐

  1. F#周报2019年第4期

    新闻 F# 4.6预览 fuget.org现在显示包依赖从属,你曾经想要了解谁在使用你的类库吗?现在你可以知道了! F#被加入Wikipedia的流式接口页面 采访Erik Schierboom Az ...

  2. css学习_css浮动

    1.文档流介绍 网页布局的核心就是利用css来摆放盒子, 把盒子摆放在合适的位置. css的定位机制有以下3种(网页布局一般需要3种搭配使用): a.普通流(标准流) b.浮动 1.浮动只有左右. 2 ...

  3. Codeforces Round div2 #541 题解

    codeforces Round #541 abstract: I构造题可能代码简单证明很难 II拓扑排序 III并查集 启发式排序,带链表 IV dp 处理字符串递推问题 V 数据结构巧用:于二叉树 ...

  4. JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?

    一种: <a href="javascript:if(confirm('确实要删除该内容吗?')){location='http://www.google.com'}"> ...

  5. 线程安全 Thread Safety Problem scala concurrency 并发

    小结: 1.基于java并发模型 Scala concurrency is built on top of the Java concurrency model. 2. 将每个请求放入一个新的线程 T ...

  6. [efficiency] emacs入门

    一. 没记错的话,这可能是第三次读emacs tutorial了.前两次读的非常慢,也不记得有没有读完了.总之最后都忘光了. 这次读的很顺畅,利用工作的空闲时间加上今天晚上(周日).总算是读完了. 没 ...

  7. post方式接口测试(一)_新建测试用例

    第一种方式:拷贝别人的 第二种方式:自己创建 二.打开浏览器(此处chrome),F12打开开发模式,输入网址登录,此时可获取到登录的 Request URL 二.打开postman,进入自己的Col ...

  8. 3、Finished with error: FormatException: Bad UTF-8 encoding 0xc3 (at offset 169)

    这是由于 app 的版本为 release 找不到 keystore 文件, 我们只需要在 app 下的 build.gradle 文件中修改为 signingConfigs.debug 即可: bu ...

  9. DjangoMTV模型之视图层views及模板层template

    Django视图层中views的内容 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容(render),也可以是一个重定向( ...

  10. vue的二维码生成器

    vue项目开发的时候经常会遇到需要将一个网址链接转化为二维码的需求,方便用户扫描观看,以下就是我在寻找vue二维码生成器的时候踩过的坑. 不能用的二维码生成器    qrcode    node-qr ...