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

    mysql怎么实现字段求和

    青灯夜游青灯夜游2022-01-06 14:40:21原创4345

    在mysql中,可以利用SUM()函数实现字段求和,该函数返回指定字段值的总和,语法“SELECT SUM(DISTINCT expression) FROM 表名 [WHERE子句];)”。

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

    在mysql中,可以利用SUM()函数实现字段求和。

    SUM()函数用于计算一组值或表达式的总和,可返回指定字段值的总和,SUM()函数的语法如下:

    SUM(DISTINCT expression)

    SUM()函数是如何工作的?

    MySQL SUM()函数示例

    我们来看看示例数据库(yiibaidb)中的orderdetails表。

    可以使用SUM()函数来计算订单编号10100的总金额,如下查询所示:

    SELECT FORMAT(SUM(quantityOrdered * priceEach),2) total FROM orderdetails WHERE orderNumber = 10100;

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

    mysql> SELECT FORMAT(SUM(quantityOrdered * priceEach),2) total FROM orderdetails WHERE orderNumber = 10100;
    +-----------+
    | total     |
    +-----------+
    | 10,223.83 |
    +-----------+
    1 row in set

    请注意,FORMAT()函数用于格式化SUM()函数的返回值。

    MySQL SUM与GROUP BY子句

    当与GROUP BY子句组合时,SUM()函数计算GROUP BY子句中指定的每个分组的总和。

    例如,可以使用具有GROUP BY子句的SUM函数计算每个订单的总金额,如下所示:

    SELECT orderNumber,
           FORMAT(SUM(quantityOrdered * priceEach),2) total
    FROM orderdetails
    GROUP BY orderNumber
    ORDER BY SUM(quantityOrdered * priceEach) DESC;

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

    +-------------+-----------+
    | orderNumber | total     |
    +-------------+-----------+
    |       10165 | 67,392.85 |
    |       10287 | 61,402.00 |
    |       10310 | 61,234.67 |
    |       10212 | 59,830.55 |
    *** 此处省略了一大波数据 *****
    |       10116 | 1,627.56  |
    |       10158 | 1,491.38  |
    |       10144 | 1,128.20  |
    |       10408 | 615.45    |
    +-------------+-----------+
    327 rows in set

    MySQL SUM与HAVING

    您可以使用HAVING子句中在SUM函数中来根据特定条件过滤结果。例如,您可以计算总订单量,只能选择总金额大于60000的订单。如下查询语句 -

    SELECT orderNumber,
           FORMAT(SUM(quantityOrdered * priceEach),2)
    FROM orderdetails
    GROUP BY orderNumber
    HAVING SUM(quantityOrdered * priceEach) > 60000
    ORDER BY SUM(quantityOrdered * priceEach);

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

    mysql> SELECT orderNumber,
           FORMAT(SUM(quantityOrdered * priceEach),2)
    FROM orderdetails
    GROUP BY orderNumber
    HAVING SUM(quantityOrdered * priceEach) > 60000
    ORDER BY SUM(quantityOrdered * priceEach);
    +-------------+--------------------------------------------+
    | orderNumber | FORMAT(SUM(quantityOrdered * priceEach),2) |
    +-------------+--------------------------------------------+
    |       10310 | 61,234.67                                  |
    |       10287 | 61,402.00                                  |
    |       10165 | 67,392.85                                  |
    +-------------+--------------------------------------------+
    3 rows in set

    MySQL SUM与LIMIT

    假设您想要计算products表中前十名最昂贵的产品的总和,可以提出以下查询:

    SELECT SUM(buyprice)
    FROM products
    ORDER BY buyprice DESC
    LIMIT 10;

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

    mysql> SELECT SUM(buyprice)
    FROM products
    ORDER BY buyprice DESC
    LIMIT 10;
    +---------------+
    | SUM(buyprice) |
    +---------------+
    | 5983.47       |
    +---------------+
    1 row in set

    它不起作用,因为具有SUM函数的SELECT语句只返回一行,LIMIT子句约束要返回的行数无效。

    要解决此问题,请使用以下子查询:

    SELECT FORMAT(SUM(buyprice),2) FROM
    (SELECT buyprice
    FROM products
    ORDER BY buyprice DESC
    LIMIT 10) price;

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

    +-------------------------+
    | FORMAT(SUM(buyprice),2) |
    +-------------------------+
    | 958.71                  |
    +-------------------------+
    1 row in set

    上面语句是怎么运行的?

    MySQL SUM与NULL

    如果没有匹配的行,则SUM函数返回NULL值。 有时,您希望SUM函数返回0而不是NULL。 在这种情况下,可以使用COALESCE函数。COALESCE函数接受两个参数,如果第一个参数为NULL,则返回第二个参数,否则返回第一个参数; 参考以下查询语句:

    SELECT COALESCE(SUM(quantityOrdered * priceEach),0)
    FROM orderdetails
    WHERE productCode = 'S1_212121';

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

    mysql> SELECT COALESCE(SUM(quantityOrdered * priceEach),0)
    FROM orderdetails
    WHERE productCode = 'S1_212121';
    +----------------------------------------------+
    | COALESCE(SUM(quantityOrdered * priceEach),0) |
    +----------------------------------------------+
    | 0.00                                         |
    +----------------------------------------------+
    1 row in set

    MySQL SUM与连接语句

    您可以使用SELECT JOIN语句中的SUM函数根据另一个表中的值指定的条件来计算表中的值的总和。

    例如,要计算取消订单金额的总和,请使用以下语句:

    SELECT FORMAT(SUM(quantityOrdered * priceEach),2) loss
    FROM orderdetails
    INNER JOIN orders USING(orderNumber)
    WHERE status = 'Cancelled'

    【相关推荐:mysql视频教程

    以上就是mysql怎么实现字段求和的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:mysql 字段求和
    上一篇:mysql怎么添加注释 下一篇:mysql怎么修改注释
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 爆肝整理MySQL数据库命令合集(总结分享)• 如何解决mysql 查询中文乱码问题• 如何解决安装mysql出现this问题• centos 源码安装mysql5.6的方法• 如何解决mysql 错误2005问题
    1/1

    PHP中文网