MySQL COUNT()函数和SUM()函数

本文深入探讨了在项目中使用BigDecimal类时遇到的空指针异常问题,详细解析了MySQL中COUNT()和SUM()函数的工作原理及使用场景,包括COUNT(*)、COUNT(expression)、COUNT(DISTINCT expression)和SUM(DISTINCT expression)的不同用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在一个项目自中用到了BigDecimal类,当时直接使用从数据库返回的数据对数据做数值方面的处理,当时使用了COUNT()函数和SUM()函数,在项目测试的时候,报了空指针异常(java.lang.NullPointerException: null),寻找到出错点,原来是BigDecimal构造器传入了null值,对代码进行分析,原来是SUM()函数的使用,出现了错误,没有对SUM()函数返回值做null值判断导致。

接下来,仔细看了看MySQL的COUNT()函数和SUM()函数使用。

MySQL COUNT()函数

COUNT()函数返回表中的行数。 COUNT()函数允许您对表中符合特定条件的所有行进行计数。

COUNT(expression)

COUNT()函数的返回类型为BIGINT。 如果没有找到匹配的行,则COUNT()函数返回0。

COUNT函数有几种形式:COUNT(*),COUNT(expression)和COUNT(DISTINCT expression)。

COUNT(*)函数返回由SELECT语句返回的结果集中的行数。COUNT(*)函数计算包含NULL和非NULL值的行,即:所有行。

如果使用COUNT(*)函数对表中的数字行进行计数,而不使用WHERE子句选择其他列,则其执行速度非常快。

COUNT(expression)返回不包含NULL值的行数。

MySQL COUNT(DISTINCT expression)返回不包含NULL值的唯一行数。

USE testdb;
-- create a demos table
CREATE TABLE IF NOT EXISTS demos(
 id int auto_increment primary key,
 val int 
);
-- insert some sample data
INSERT INTO demos(val)
VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5);
-- select data from demos table
SELECT * FROM demos;

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

+----+------+
| id | val  |
+----+------+
|  1 |    1 |
|  2 |    1 |
|  3 |    2 |
|  4 |    2 |
|  5 | NULL |
|  6 |    3 |
|  7 |    4 |
|  8 | NULL |
|  9 |    5 |
+----+------+
9 rows in set

使用COUNT(*)函数的情况如下:

mysql> SELECT COUNT(*) FROM demos;
+----------+
| COUNT(*) |
+----------+
|        9 |
+----------+
1 row in set

使用COUNT(expression)函数的情况如下:

mysql> SELECT COUNT(val) FROM demos;
+---------------------+
| COUNT(DISTINCT val) |
+---------------------+
|                   7 |
+---------------------+
1 row in set

使用COUNT(DISTINCT expression)函数的情况如下:

mysql> SELECT COUNT(DISTINCT val) FROM demos;
+---------------------+
| COUNT(DISTINCT val) |
+---------------------+
|                   5 |
+---------------------+
1 row in set

 

MySQL SUM()函数

SUM()函数用于计算一组值或表达式的总和,SUM()函数的语法如下:

SUM(DISTINCT expression)

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

  • 如果在没有返回匹配行SELECT语句中使用SUM函数,则SUM函数返回NULL,而不是0。
  • DISTINCT运算符允许计算集合中的不同值。
  • SUM函数忽略计算中的NULL值。

如果没有匹配的行,则SUM函数返回NULL值。

mysql> SELECT SUM(val) FROM demos WHERE id = 5;
+-------------------------+
| SUM(val)                |
+-------------------------+
| NULL                    |
+-------------------------+

有时,您希望SUM函数返回0而不是NULL。 在这种情况下,可以使用COALESCE函数。COALESCE函数接受两个参数,如果第一个参数为NULL,则返回第二个参数,否则返回第一个参数。

mysql> SELECT COALESCE(SUM(id),0) FROM demos WHERE val = 1;
+--------------------------+
| COALESCE(SUM(id),0)      |
+--------------------------+
| 3                        |
+--------------------------+

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值