零基础入门 SQL 系列之(五)数据汇总

数据汇总函数

AVG() – 求平均值
SELECT AVG(prod_price)
FROM products;

我们还可以对符合条件的行求平均值,例如:

SELECT AVG(prod_price)
FROM products
WHERE vend_id = 'BRS01';

这里有两点要说明下:1.AVG() 会忽略列值为NULL的行。2.AVG() 只能用来确定特定数值列的平均值。

COUNT() – 计数

我们使用 COUNT() 函数进行计数。
COUNT() 函数有两种使用方式:

  • 使用 COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
  • 使用 COUNT(column) 对特定列中具有值的行进行计数,忽略 NULL 值。
    例如:
SELECT COUNT(*) 
FROM customers;
SELECT COUNT(cust_email)
FROM customers; 

如果指定列名,则 COUNT() 函数会忽略指定列的值为空的行,但如果COUNT() 函数中用的是星号(*),则不忽略。

MAX() – 求最大值
SELECT MAX(prod_price)
FROM products;
MIN() – 求最小值
SELECT MIN(prod_price)
FROM products;

MAX(),MIN() 函数会忽略值为 NULL 的行。

SUM() – 求和
SELECT SUM(quantity * item_price)
FROM orderitems;

汇总函数用来汇总数据,这些函数都很高效,一般比自己在程序中计算要快得多,所以能用汇总函数解决的我们就不要自己在程序中计算。

分组汇总

假设我们要求每个供应商的商品价格的平均值,如果一个供应商一个供应商的计算,显然过于麻烦。这时候我们可以使用 GROUP BY 子句。

SELECT vend_id, AVG(prod_price)
FROM products
GROUP BY vend_id;

在使用 GROUP BY 时,除计算语句外,SELECT 语句中的每一列都必须在 GROUP BY子句中给出。GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。
像对行进行过滤一样,我们也可以对分组进行过滤。与过滤行不同的是,过滤分组不能使用 WHERE 子句,因为 WHERE 子句没有分组的概念,我们可以使用另外一个子句 HAVINGWHERE 用来过滤行,HAVING 用来过滤分组。WHERE 在数据分组前进行过滤,HAVING 在数据分组后进行过滤。
例如:
每个供应商供应商品的平均价格。

SELECT vend_id, AVG(prod_price) AS avg_price
FROM products
GROUP BY vend_id;

使用 having 进行过滤

SELECT vend_id, AVG(prod_price) AS avg_price
FROM products
GROUP BY vend_id
HAVING avg_price > 5;

每个供应商的商品数

SELECT vend_id, count(*)
FROM products
GROUP BY end_id;

每个供应商商品价格的最大值

SELECT vend_id, MAX(prod_price)
FROM products
GROUP BY vend_id;

每个供应商商品价格的最小值

SELECT vend_id, MIN(prod_price)
FROM products
GROUP BY vend_id;

每个订单的金额

SELECT order_num,SUM(quantity * item_price)
FROM orderitems
GROUP BY order_num;

SQL 子句的顺序

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

备注:示例中用到的表和数据可以通过链接(https://github.com/songw/sql)下载。

本系列目录:
零基础入门 SQL 系列之(一)查询数据
零基础入门 SQL 系列之(二)排序
零基础入门 SQL 系列之(三)过滤数据
零基础入门 SQL 系列之(四)内置函数
零基础入门 SQL 系列之(五)数据汇总
零基础入门 SQL 系列之(六)表连接
零基础入门 SQL 系列之(七)组合
零基础入门 SQL 系列之(八)插入、更新、删除
零基础入门 SQL 系列之(九)创建和操作表
零基础入门 SQL 系列之(十)视图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值