数据处理

举报
梦笔生花 发表于 2022/11/01 20:41:30 2022/11/01
【摘要】 1. 汇总数据函数1.AVG() -- 求平均值我们可以求某个字段所有行的平均值,例如:SELECT AVG(prod_price)FROM products;运行结果如下:我们可以给平均值起一个名字,例如:SELECT AVG(prod_price) avg_priceFROM products;运行结果如下:我们还可以对符合条件的行求平均值,例如:SELE...

1. 汇总数据函数

1.AVG() -- 求平均值我们可以求某个字段所有行的平均值,例如:

SELECT 
    AVG(prod_price)
FROM 
    products;

运行结果如下:

我们可以给平均值起一个名字,例如:

SELECT 
    AVG(prod_price) avg_price
FROM 
    products;

运行结果如下:

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

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

运行结果如下:

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

2.COUNT() -- 计数我们使用COUNT()函数进行计数。COUNT() 函数有两种使用方式:(1). 使用 COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。(2). 使用 COUNT(column)对特定列中具有值的行进行计数,忽略 NULL 值。例如:

SELECT 
    COUNT(*) 
FROM 
    customers;

运行结果如下:


SELECT 
    COUNT(cust_email)
FROM 
    customers; 

运行结果如下:

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

3.MAX() -- 求最大值

SELECT 
    MAX(prod_price)
FROM 
    products;

运行结果如下:

4.MIN() -- 求最小值

SELECT 
    MIN(prod_price)
FROM 
    products;

运行结果如下:

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

5.SUM() -- 求和

# 所有订单的金额之和。
SELECT 
    SUM(quantity * item_price)
FROM
    orderitems;

运行结果如下:

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

2. 分组

假设我们要求每个供应商的商品价格的平均值,如果一个供应商一个供应商的计算,显然过于麻烦。这时候我们可以使用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 子句没有分组的概念,我们可以使用另外一个子句 HAVING。WHERE 用来过滤行,HAVING 用来过滤分组。WHERE 在数据分组前进行过滤,HAVING 在数据分组后进行过滤。例如:

#  每个供应商供应商品的平均价格。
SELECT 
    vend_id, 
    AVG(prod_price) AS avg_price
FROM 
    products
GROUP BY 
    vend_id;

运行结果如下:

使用 having 进行过滤

# 使用 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 
    vend_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


下列哪一个函数可以求平均值?

A. COUNT()

B. MAX()

C. AVG()

D. SUM()

1. 汇总数据函数

1.AVG() -- 求平均值我们可以求某个字段所有行的平均值,例如:

SELECT 
    AVG(prod_price)
FROM 
    products;

运行结果如下:

我们可以给平均值起一个名字,例如:

SELECT 
    AVG(prod_price) avg_price
FROM 
    products;

运行结果如下:

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

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

运行结果如下:

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

2.COUNT() -- 计数我们使用COUNT()函数进行计数。COUNT() 函数有两种使用方式:(1). 使用 COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。(2). 使用 COUNT(column)对特定列中具有值的行进行计数,忽略 NULL 值。例如:

SELECT 
    COUNT(*) 
FROM 
    customers;

运行结果如下:


SELECT 
    COUNT(cust_email)
FROM 
    customers; 

运行结果如下:

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

3.MAX() -- 求最大值

SELECT 
    MAX(prod_price)
FROM 
    products;

运行结果如下:

4.MIN() -- 求最小值

SELECT 
    MIN(prod_price)
FROM 
    products;

运行结果如下:

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

5.SUM() -- 求和

# 所有订单的金额之和。
SELECT 
    SUM(quantity * item_price)
FROM
    orderitems;

运行结果如下:

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

2. 分组

假设我们要求每个供应商的商品价格的平均值,如果一个供应商一个供应商的计算,显然过于麻烦。这时候我们可以使用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 子句没有分组的概念,我们可以使用另外一个子句 HAVING。WHERE 用来过滤行,HAVING 用来过滤分组。WHERE 在数据分组前进行过滤,HAVING 在数据分组后进行过滤。例如:

#  每个供应商供应商品的平均价格。
SELECT 
    vend_id, 
    AVG(prod_price) AS avg_price
FROM 
    products
GROUP BY 
    vend_id;

运行结果如下:

使用 having 进行过滤

# 使用 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 
    vend_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


下列哪一个函数可以求平均值?

A. COUNT()

B. MAX()

C. AVG()

D. SUM()

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。