《SQL必知必会》--汇总数据

第九课 汇总数据

本课接着上一节课,继续讲解函数。相对于上一节课中各种不同类型的函数,本节课中的函数在数据分析时也更常用,且基本具有可移植性。

聚集函数

在实际需求中,我们经常需要把某列的数据汇总起来寻找我们需要的特定数值,但是却又不需要把所有数值检索出来。

比如,我们寻找某一列的最大值,我们首先需要遍历该列,然后进行比较,最后只是输出一个数值而已。

这些便是聚集函数(aggregate function)的作用:遍历某列中特定行,计算并返回一个值。

函数 说明
AVG() 返回某列平均值
COUNT() 返回某列的行数
MAX() 返回某列最大值
MIN() 返回某列最小值
SUM() 返回某列值之和

AVG()函数

  1. 求某列所有行数值的平均值

输入:

1
2
select avg(prod_price) AS avg_price
from products;

输出:

1
2
3
avg_price
---------
6.823333
  1. 求某列有条件的特定行行数值的平均值

输入:

1
2
3
select avg(prod_price) AS avg_price
from products
where vend_id = 'DLL01';

输出:

1
2
3
avg_price
---------
3.865000

每一个AVG()函数只能用于一列,求多列平均值,请用多个AVG()函数;
AVG()函数忽略列值为 NULL 的行。

COUNT()函数

COUNT()函数有两种命令模式,COUNT(*)COUNT(COLUMN)

  1. COUNT(*)计算所有行数,无论行中数值样式,包括NULL值。
1
2
SELECT COUNT(*)
FROM products;
  1. COUNT(COLUMN)计算某一列中的行数,此时,自动忽略NULL值。
1
2
SELECT COUNT(prod_id)
FROM products;
1
2
3
SELECT COUNT(prod_id)
FROM products
where vend_id = 'DLL01';

MAX()函数

  1. 求某列所有行数值的最大值

输入:

1
2
select max(prod_price) AS max_price
from products;

输出:

1
2
3
max_price
---------
11.99
  1. 求某列有条件的特定行行数值的最大值

输入:

1
2
3
select max(prod_price) AS max_price
from products
where vend_id = 'DLL01';

输出:

1
2
3
max_price
---------
4.99

忽略NULL值;
可用于数值数据、日期数据和文本数据;
当用于文本数据后,返回排序最后位置的数值。

MIN()函数

  1. 求某列所有行数值的最小值

输入:

1
2
select min(prod_price) AS min_price
from products;

输出:

1
2
3
min_price
---------
3.49
  1. 求某列有条件的特定行行数值的最小值

输入:

1
2
3
select min(prod_price) AS min_price
from products
where vend_id = 'DLL01';

输出:

1
2
3
min_price
---------
3.49

忽略NULL值;
可用于数值数据、日期数据和文本数据;
当用于文本数据后,返回排序最前位置的数值。

SUM()函数

  1. 普通某列全部数值之和
1
2
select sum(prod_price) as sum_price
from products;
  1. 有条件的过滤后数据数值之和
1
2
3
select sum(prod_price) as sum_price
from products
where prod_id = 20005;
  1. 过滤后经过算术计算的数据数值之和
1
2
3
select sum(prod_price*quality) as total_price
from products
where prod_id = 20005;

忽略NULL值

聚集不同值

以上5各聚集函数都可以如下使用:

  • 指定ALL参数(默认,可不指定)
  • 制定DISTINCT参数

不指定参数时:

输入

1
2
select avg(prod_price) AS avg_price
from products;

输出

1
2
3
avg_price
---------
6.823333

制定DISTINCT参数:

输入

1
2
select avg(distinct prod_price) AS avg_price
from products;

输出

1
2
3
avg_price
---------
7.490000

DISTINCT不能用于COUNT(*),但可用于COUNT(column)
DISTINCT从技术上可以用于MIN()MAX(),但是没必要;

组合聚集函数

  • 组合聚集函数,也就是说一个SELECT语句可以包含多个聚集函数。
  • 但是,需要记住为每一个聚集函数子句使用不同别名。
1
2
3
4
5
6
7
select prod_price
COUNT(*) as num_items
COUNT(Prod_price) as num_price
MIN(prod_price) as min_price
MAX(prod_price) as max_price
AVG(DISTINCT PROD_PRICE) AS Dis_avg_price
from products;

小结

本文看似学了很多,但是细分下来,也就是几点。

  1. 5个聚集函数的基本使用;
  2. 5个聚集函数与过滤函数的配合使用;
  3. 5个聚集函数与取值参数的配合使用;
  4. 5个聚集函数的组合使用。