SQL 聚合函数

2022-03-16  本文已影响0人  山药鱼儿

聚合函数用于汇总表的数据,比如求和、计数、求某列的平均值等等。SQL 中一共包含了 5 个聚合函数,这些聚合函数与上一篇我们提到的文本处理函数、日期时间函数不同,SQL 聚合函数在主要的 DBMS 中具有相当一致的支持。

下面,我们依次来学习这 5 个 SQL 聚合函数吧~

AVG 函数

函数 AVG() 用来返回所有列的平均值,也可以用来返回特定列或行的平均值。如下 SQL 返回商品表中所有产品的平均价格,其中商品表如下:

查询所有商品的平均价格:

SELECT
    AVG( prod_price ) AS avg_price
FROM
    Products;

商品价格的聚合结果:

此外,AVG 结合 WHERE 子句也可以返回特定行的平均值。以下 SQL 返回供应商 DLL01 所提供的产品的平均价格。

SELECT
    AVG( prod_price ) AS avg_price 
FROM
    Products 
WHERE
    vend_id = 'DLL01';

聚合结果:

注:AVG 计算均值时,忽略值为 NULL 的行。

COUNT 函数

函数 COUNT() 用于计数,使用 COUNT() 可以确定表中行的数目或符合特定条件的行的数目。

如下 SQL 返回顾客表中顾客的总数,其中顾客表如下:

SQL 语句:

SELECT
    COUNT( * ) 
FROM
    Customers;

聚合结果:

其中 COUNT(*) 对所有行计数。下面只统计填写了 Email 地址的顾客数量。

SELECT
    COUNT(cust_email) AS num_cust
FROM
    Customers;

聚合结果:

注:COUNT(*) 在计数时不会忽略值为 NULL 的行;COUNT() 在传入列名时,会忽略指定列为 NULL 的行。

MAX 函数

函数 MAX() 要求指定列名,返回列中的最大值。如下的 SQL 返回产品表中最贵物品的价格。

SELECT
    MAX( prod_price ) AS max_price 
FROM
    Products;

聚合结果:

注:MAX() 函数求最大值时忽略值为 NULL 的行。

MIN 函数

MINMAX 相反,求出指定列的最小值。如下的 SQL 返回商品表中最廉价产品的价格。

SELECT
    MIN( prod_price ) AS min_price 
FROM
    Products;

聚合结果:

注:MIN() 函数求最小值时忽略值为 NULL 的行。

SUM 函数

SUM 函数对指定列进行求和。我们以订单表说明 SUM 函数的使用。

其中 quantity 为订单包含的某种商品的数量。如下的 SQL 计算订单 20005 一共购买了多少件商品。

SELECT
    SUM( quantity ) AS sum_quantity 
FROM
    OrderItems 
WHERE
    order_num = '20005';

聚合结果:

此外,还可以计算订单 20005 的总金额:

SELECT
    SUM( quantity * item_price ) AS sum_quantity 
FROM
    OrderItems 
WHERE
    order_num = '20005';

计算结果:

注:SUM 函数忽略列值为 NULL 的行。

此外,聚合时还允许先去重。比如,计算供应商 DLL01 定价的平均水平,这是就需要先进行去重,再计算平均值。

SELECT
    AVG( DISTINCT prod_price ) AS avg_price 
FROM
    Products 
WHERE
    vend_id = 'DLL01';

聚合结果:

最后,在一个 SELECT 语句中也可以包含多个聚合函数。下面的查询语句就包含了 4 个聚合函数。

SELECT
    COUNT( * ) AS num_items,
    MIN( prod_price ) AS min_price,
    MAX( prod_price ) AS max_price,
    AVG( prod_price ) AS avg_price 
FROM
    Products;

聚合结果:

小结

聚合函数用于数据汇总,SQL 支持 5 个聚合函数,聚合函数除了单独使用,最常见的场景是结合分组,即分组聚合。我们下节见~

上一篇 下一篇

猜你喜欢

热点阅读