SQL基础——聚合与排序(上)

简介: SQL基础——聚合与排序(上)

聚合与排序

前言

系统学习SQL的笔记,用于记录学习过程。

思维导图



聚合函数

通过SQL对数据进行某种操作或计算是需要使用函数,用于汇总的函数成为聚合函数或聚集函数。通俗理解就是将多行汇总为一行。
常用的聚合函数:

COUNT:计算表中的记录数(行数)

SUM:计算表中数值列中数据的合计值

AVG:计算表中数值列中数据的平均值

MAX:计算表中数值列中数据的最大值

MIN:求出表中任意列中数据的最小值

示例表3-1



计算表中数据的行数 COUNT函数

示例代码3.1 计算全部数据的行数

SELECT
    COUNT(*) 
FROM
    Product

执行结果



计算NULL之外的数据的行数

想要计算表中的全部数据的行数时,可以像SELECT COUNT(*)这样使用星号。如果想要得到purchase_price列中非空行数的话,可以像代码示例3.2那样。

代码示例3.2 计算NULL之外的数据行数

SELECT
    count( purchase_price ) 
FROM
    Product

执行结果


注意:COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。

计算合计值SUM

代码示例3.3 计算销售单价的合计值

SELECT
    SUM(sale_price)
FROM
    Product

执行结果




代码示例3.4 计算销售单价和进货单价的合计值

SELECT
    SUM( sale_price ),
    SUM( purchase_price ) 
FROM
    Product

执行结果


通过SUM(purchase_price)

将进货单价的合计值也一起计算出来了,但有一点需要大家注意。具体的计算过程如下所示。


由于在“四则运算中如果存在NULL,结果一定是NULL,但是对于所有的聚合函数,如果以列名为参数,那么在计算之前就已经把NULL排除在外了。因此,无论有多少个NULL都会被无视。

注意:聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL

计算平均值 AVG

代码示例3.5 计算销售单价的平均值

SELECT
    AVG( sale_price ) 
FROM
    Product

执行结果



计算最大值和最小值 MAX MIN

想要计算出多条记录中的最大值或最小值,可以分别使用MAX和MIN函数,它们是英语maximam(最大值)和minimum(最小值)的缩写。

代码示例3.6 计算销售单价的最大值和进货单价的最小值

SELECT
    MAX( sale_price ),
    MIN( purchase_price ) 
FROM
    Product;

执行结果



注意MAX/MIN函数和SUM/AVG函数有一点不同,SUM/AVG函数只能对数值类型的列使用,而MAX/MIN函数原则上可以使用与任何数据类型的列。

例如对日期类型的列regist_date使用MAX/MIN函数进行计算

代码示例3.7计算登记日期的最大值和最小值

SELECT
    MAX( regist_date ),
    MIN( regist_date ) 
FROM
    Product;

执行结果

注意:MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。

使用聚合函数删除重复值(关键字DISTINCT)

在示例表3-1中我们可以看到product_type列和销售单价sale_price列的数据中,存在多行数据相同的情况。

拿商品种类来说,表中总共有3种商品共8行数据,其中衣服2行,办公用品2行,厨房用具4行。如果想要计算出商品种类的个数,怎么做比较好呢?可以通过删除重复数据然后再计算数据行。

代码示例3.8 计算去除重复数据后的数据行数

SELECT
    count( DISTINCT product_type ) 
FROM
    Product

执行结果


注意:这时DISTINCT必须卸载括号中。这时因为必须要在计算行数之前删除product_type列中的重复数据。如果卸载括号外的话,就会先计算数据行数,然后再删除数据,结果就得到了product_type列的所有行数。

目录
相关文章
|
5月前
|
SQL 数据库管理
第二章:基础查询与排序---SQL学习笔记
第二章:基础查询与排序---SQL学习笔记
76 0
|
5月前
|
SQL 存储
SQL组内排序
为什么要用ORDER BY来做,因为是这样的,由于采用的多线程,各个线程触发时间十分相近,但是我们需要对每一个项目进行分组,所以在此处,我们做了一个唯一标识IDENTIFICATION,每个项目每次执行时记录的6条日志里都会存储这个唯一标识。
|
2月前
|
SQL 流计算
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
19 1
|
3月前
|
分布式计算 BI MaxCompute
SQL 能力问题之输出聚合的维度列的名称,如何解决
SQL 能力问题之输出聚合的维度列的名称,如何解决
|
4月前
|
SQL 关系型数据库 MySQL
MySQL数据库——SQL(3)-DQL(基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询、案例练习)
MySQL数据库——SQL(3)-DQL(基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询、案例练习)
53 0
|
5月前
|
分布式计算 资源调度 Hadoop
Flink报错问题之Sql往kafka表写聚合数据报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
5月前
|
SQL
SQL语句两个字段或多个字段同时order by 排序
SQL语句两个字段或多个字段同时order by 排序
871 0
|
5月前
|
SQL 数据库管理
SQL基础题----基本的SELECT语句、order by排序
SQL基础题----基本的SELECT语句 ambiguous 模糊
212 1
|
5月前
|
SQL 人工智能 运维
数据库基础入门 — SQL排序与分页
数据库基础入门 — SQL排序与分页
50 0
|
5月前
|
SQL 数据采集 分布式计算
Spark SQL中的聚合与窗口函数
Spark SQL中的聚合与窗口函数