• 技术文章 >数据库 >mysql教程

    mysql中怎么求平均值

    青灯夜游青灯夜游2021-12-02 11:29:33原创2162

    在mysql中,可以利用AVG()函数来求平均值,该函数可以通过计算返回的行数和每一行数据的和,求得指定列数据的平均值;语法“SELECT AVG(column_name) FROM table_name”。

    本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

    在mysql中,可以利用AVG()函数来求平均值。

    MySQL AVG()函数是一个聚合函数,它用于计算一组值或表达式的平均值。

    AVG() 函数可以通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

    AVG()函数的语法如下:

    SELECT AVG(column_name) FROM table_name;

    AVG()函数中还可添加DISTINCT运算符来计算不同值的平均值。 例如,如果您有一组值1123,具有DISTINCT操作的AVG()函数将返回不同值的和,即:(1 + 2 + 3)/3 = 2.00

    MySQL AVG示例

    我们将在示例数据库中使用products表进行演示,下图是products表的结构 -

    mysql> desc products;
    +--------------------+---------------+------+-----+---------+------------------+
    | Field              | Type          | Null | Key | Default | Extra            |
    +--------------------+---------------+------+-----+---------+------------------+
    | productCode        | varchar(15)   | NO   | PRI |         |                  |
    | productName        | varchar(70)   | NO   | MUL | NULL    |                  |
    | productLine        | varchar(50)   | NO   | MUL | NULL    |                  |
    | productScale       | varchar(10)   | NO   |     | NULL    |                  |
    | productVendor      | varchar(50)   | NO   |     | NULL    |                  |
    | productDescription | text          | NO   |     | NULL    |                  |
    | quantityInStock    | smallint(6)   | NO   |     | NULL    |                  |
    | buyPrice           | decimal(10,2) | NO   |     | NULL    |                  |
    | MSRP               | decimal(10,2) | NO   |     | NULL    |                  |
    | stockValue         | double        | YES  |     | NULL    | STORED GENERATED |
    +--------------------+---------------+------+-----+---------+------------------+
    10 rows in set

    要计算products表中所有产品的平均价格,可以使用AVG函数,如下查询:

    SELECT AVG(buyprice) 'Avarage Price' FROM products;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(buyprice) 'Avarage Price' FROM products;
    +---------------+
    | Avarage Price |
    +---------------+
    | 54.395182     |
    +---------------+
    1 row in set

    请注意,FORMAT函数用于格式化AVG函数返回的平均值。

    您可以向SELECT语句添加一个WHERE子句来计算子集值的平均值。 例如,要计算产品线为Classic Cars的产品的平均价格,您可以使用以下查询:

    SELECT AVG(buyprice) 'Avarage Classic Cars Price'
    FROM products
    WHERE productline = 'Classic Cars';

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(buyprice) 'Avarage Classic Cars Price'
    FROM products
    WHERE productline = 'Classic Cars';
    +----------------------------+
    | Avarage Classic Cars Price |
    +----------------------------+
    | 64.446316                  |
    +----------------------------+
    1 row in set

    具有DISTINCT的MySQL AVG()函数

    有些产品价格相同,可以使用以下查询来检查它:

    SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;
    +--------------------------------------------+
    | COUNT(buyprice) - COUNT(DISTINCT buyprice) |
    +--------------------------------------------+
    |                                          2 |
    +--------------------------------------------+
    1 row in set

    可以使用AVG()函数通过添加DISTINCT运算符来计算不同价格的平均值,如下所示:

    SELECT AVG(DISTINCT buyprice) FROM products;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(DISTINCT buyprice) FROM products;
    +------------------------+
    | AVG(DISTINCT buyprice) |
    +------------------------+
    | 54.372870              |
    +------------------------+
    1 row in set

    结果与使用DISTINCT操作符的平均价格略有不同。

    具有GROUP BY子句的MySQL AVG

    我们经常使用AVG函数与GROUP BY子句一起计算表中每组行的平均值。

    例如,要计算每个产品线的产品的平均价格,您将使用带有GROUP BY子句的AVG函数,如下查询语句:

    SELECT productline,
           AVG(buyprice) 'Avarage Price'
    FROM products
    GROUP BY productline;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT productline,
           AVG(buyprice) 'Avarage Price'
    FROM products
    GROUP BY productline;
    +------------------+---------------+
    | productline      | Avarage Price |
    +------------------+---------------+
    | Classic Cars     | 64.446316     |
    | Motorcycles      | 50.685385     |
    | Planes           | 49.629167     |
    | Ships            | 47.007778     |
    | Trains           | 43.923333     |
    | Trucks and Buses | 56.329091     |
    | Vintage Cars     | 46.066250     |
    +------------------+---------------+
    7 rows in set

    具有HAVING子句的MySQL AVG

    您可以使用AVG函数中的HAVING子句中为分组的平均值设置条件。 例如,如果要仅选择产品平均价格大于50的产品线,则可以使用以下查询:

    SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;
    +------------------+---------------+
    | productline      | Avarage Price |
    +------------------+---------------+
    | Classic Cars     | 64.446316     |
    | Motorcycles      | 50.685385     |
    | Trucks and Buses | 56.329091     |
    +------------------+---------------+
    3 rows in set

    MySQL AVG()函数与子查询

    您可以在SQL语句中多次使用AVG()函数来计算一组平均值的平均值。 例如,可以计算产品线平均购买价格的平均买价如下:

    SELECT AVG(pl_avg) 'Average Product'
    FROM (
        SELECT AVG(buyprice) pl_avg
        FROM products
        GROUP BY productline
    ) avgs;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(pl_avg) 'Average Product'
    FROM (
        SELECT AVG(buyprice) pl_avg
        FROM products
        GROUP BY productline
    ) avgs;
    +-----------------+
    | Average Product |
    +-----------------+
    | 51.1553314286   |
    +-----------------+
    1 row in set

    怎么运行的 -

    具有NULL值的MySQL AVG函数

    AVG()函数忽略计算中的NULL值,请参阅以下示例:

    首先,创建一个名为t的新表,其中有两列idvalval列可以包含NULL值。

    CREATE TABLE IF NOT EXISTS t(
        id  int auto_increment primary key,
        val int
    );

    其次,在t表中插入一些行,包括NULL值。

    INSERT INTO t(val)
    VALUES(1),(2),(nulL),(3);

    第三,使用AVG()函数计算val列中值的平均值:

    SELECT AVG(val) FROM t;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(val) FROM t;
    +----------+
    | AVG(val) |
    +----------+
    | 2.0000   |
    +----------+
    1 row in set

    该语句按预期返回2,因为在AVG函数的计算中不包括NULL值。

    具有控制流函数的MySQL AVG

    要计算列的平均值,并在单个语句中有条件地计算相同列的平均值,可以使用具有控制流函数(如IFCASEIFNULLNULLIF等)的AVG函数。

    例如,要计算Classic Cars产品线的平均价格与所有产品的平均价格的比例,请使用以下声明:

    SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products'
    FROM products;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products'
    FROM products;
    +------------------------+
    | Classic Cars/ Products |
    +------------------------+
    | 1.1847798580           |
    +------------------------+
    1 row in set

    如果产品线是Classic Cars,则IF(productline='Classic Cars',buyprice,NULL)表达式返回价格,否则返回NULL

    因为AVG函数忽略了计算中的NULL值,所以AVG(IF(productline ='Classic Cars',buyprice,NULL))表达式只计算产品线是Classic Cars的产品的平均价格。

    【相关推荐:mysql视频教程

    以上就是mysql中怎么求平均值的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:mysql 平均值 AVG()
    上一篇:centos下怎么安装mysql 下一篇:mysql初始密码是什么
    PHP编程就业班

    相关文章推荐

    • mysql怎么进行索引修改• sqlite和mysql的区别是什么• mysql怎么给字段增加自增属性• mysql是什么数据库• mysql子查询语句是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网