首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
9.1 基本查询语句
9.2 单表查询
9.2.1 查询所有字段
9.2.2 查询指定字段
9.2.3 查询指定数据
9.2.4 带关键字IN的查询
9.2.5 带关键字BETWEEN AND的范围查询
9.2.6 带LIKE的字符匹配查询
9.2.7 用IS NULL关键字查询空值
9.2.8 带AND的多条件查询
9.2.9 带OR的多条件查询
9.2.10 用DISTINCT关键字去除结果中的重复行
9.2.11 用ORDER BY关键字对查询结果进行排序
9.2.12 用GROUP BY关键字分组查询
9.2.13 用LIMIT限制查询结果的数量
9.3 聚合函数查询
9.3.1 COUNT()统计函数
9.3.2 SUM()求和函数
9.3.3 AVG()平均数函数
9.3.4 MAX()最大值函数
9.3.5 MIN()最小值函数
9.4 连接查询
9.4.1 内连接查询
9.4.2 外连接查询
9.4.3 复合条件连接查询
9.5 子查询
9.5.1 带IN关键字的子查询
9.5.2 带比较运算符的子查询
9.5.3 带EXISTS关键字的子查询
9.5.4 带ANY关键字的子查询
9.5.5 带ALL关键字的子查询
9.6 合并查询结果
9.7 定义表和字段的别名
9.7.1 为表取别名
9.7.2 为字段取别名
9.8 使用正则表达式查询
9.8.1 匹配指定字符中的任意一个
9.8.2 使用“*”和“ ”来匹配多个字符
9.8.3 匹配以指定的字符开头和结束的记录
10.1 MySQL函数
10.2 数学函数
10.2.1 ABS(x)绝对值函数
10.2.2 FLOOR(x)向下取整函数
10.2.3 RAND()随机数函数
10.2.4 PI()圆周率函数
10.2.5 TRUNCATE(x,y)截断函数
10.2.6 ROUND(x)近似值函数和ROUND(x,y)四舍五入函数
10.2.7 SQRT(x)平方函数
10.3 字符串函数
10.3.1 INSERT(s1,x,len,s2)替换函数
10.3.2 UPPER(s)函数和UCASE(s)字母大写函数
10.3.3 LEFT(s,n)取左函数
10.3.4 RTRIM(s)去空格函数
10.3.5 SUBSTRING(s,n,len)截取函数
10.3.6 REVERSE(s)反转函数
10.3.7 FIELD(s,s1,s2,…,sn)位置函数
10.3.8 LOCATE(s1,s)、POSITION(s1 IN s)和INSTR(s,s1)3个位置函数
10.4 日期和时间函数
10.4.1 CURDATE()和CURRENT_DATE()当前日期函数
10.4.2 CURTIME()和CURRENT_TIME()当前时间函数
10.4.3 NOW()当前日期和时间函数
10.4.4 DATEDIFF(d1,d2)间隔天数函数
10.4.5 ADDDATE(d,n)日期计算函数
10.4.6 ADDDATE(d,INTERVAL expr type)日期时间计算函数
10.4.7 SUBDATE(d,n)日期计算函数
10.5 条件判断函数
10.6 系统信息函数
10.6.1 获取MySQL版本号、连接数和数据库名的函数
10.6.2 获取用户名的函数
10.6.3 获取字符串的字符集和排序方式的函数
10.7.1 格式化函数FORMAT(x,n)
10.7.2 改变字符集的函数
10.7.3 改变字段数据类型的函数
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(三)
小册名称:MySQL从入门到精通(三)
### 9.3.2 SUM()求和函数 在MySQL中,`SUM()`函数是一个非常重要的聚合函数,它用于计算数值列中所有值的总和。无论是在数据分析、财务报告、还是简单的数据库查询中,`SUM()`函数都扮演着不可或缺的角色。本章节将深入探讨`SUM()`函数的工作原理、使用场景、高级技巧以及在实际应用中的注意事项。 #### 9.3.2.1 基本用法 `SUM()`函数的基本语法非常简单,其基本形式为: ```sql SELECT SUM(column_name) FROM table_name WHERE condition; ``` 这里,`column_name`是你想要计算总和的数值列名,`table_name`是表名,而`WHERE`子句(可选)用于指定哪些行应该被包含在总和的计算中。 **示例**: 假设我们有一个名为`sales`的表,记录了不同产品的销售金额,表结构如下: ``` +------------+----------+ | product_id | amount | +------------+----------+ | 1 | 100.00 | | 2 | 150.50 | | 1 | 200.00 | | 3 | 75.25 | +------------+----------+ ``` 如果我们想要计算所有产品的销售总额,可以使用以下SQL查询: ```sql SELECT SUM(amount) AS total_sales FROM sales; ``` 这将返回: ``` +------------+ | total_sales| +------------+ | 525.75 | +------------+ ``` #### 9.3.2.2 与WHERE子句结合使用 `SUM()`函数常与`WHERE`子句结合使用,以计算满足特定条件的数值列的总和。 **示例**: 如果我们只对`product_id`为1的产品销售总额感兴趣,可以这样做: ```sql SELECT SUM(amount) AS total_sales_for_product1 FROM sales WHERE product_id = 1; ``` 这将返回产品ID为1的所有销售记录的总和。 #### 9.3.2.3 与GROUP BY子句结合使用 当需要对数据进行分组,并计算每个组的总和时,`SUM()`函数与`GROUP BY`子句的结合就显得尤为重要。 **示例**: 如果我们想要知道每个产品的总销售额,可以这样做: ```sql SELECT product_id, SUM(amount) AS total_sales_per_product FROM sales GROUP BY product_id; ``` 这将返回每个产品ID对应的销售总额。 #### 9.3.2.4 处理NULL值 在MySQL中,`SUM()`函数会自动忽略`NULL`值。这意味着,如果你的数值列中包含`NULL`,它们将不会计入总和。 **示例**: 假设`sales`表中有一个额外的记录,其`amount`值为`NULL`: ``` +------------+----------+ | product_id | amount | +------------+----------+ | 4 | NULL | +------------+----------+ ``` 即使添加了这条记录,之前的`SUM(amount)`查询结果也不会改变,因为`NULL`值被自动忽略了。 #### 9.3.2.5 使用SUM()进行条件求和 虽然`SUM()`函数本身不直接支持条件求和(即只对满足特定条件的行进行求和),但你可以通过`CASE`语句或子查询来实现这一目的。 **使用CASE语句**: ```sql SELECT SUM(CASE WHEN product_id = 1 THEN amount ELSE 0 END) AS total_sales_for_product1 FROM sales; ``` 这个查询将只对`product_id`为1的行中的`amount`值进行求和,其他行的`amount`值被视为0(实际上由于求和操作,这些0值不会影响最终结果)。 **使用子查询**: 你也可以通过先筛选数据,再对筛选结果进行求和来实现条件求和。不过,对于简单的条件,直接使用`WHERE`子句或`CASE`语句通常更为直接和高效。 #### 9.3.2.6 注意事项 1. **数据类型**:确保你正在对数值列使用`SUM()`函数。虽然MySQL在某些情况下会尝试将非数值类型转换为数值(如字符串形式的数字),但这种转换可能会导致意外的结果或错误。 2. **性能考虑**:当对大型数据集使用`SUM()`函数时,特别是与`GROUP BY`子句结合使用时,应考虑查询的性能。合理的索引可以显著提高查询速度。 3. **精确度**:MySQL中的浮点数计算可能会受到精确度问题的影响。如果需要对大量浮点数进行精确求和,可能需要考虑使用DECIMAL数据类型或在应用程序层面进行求和。 4. **空值处理**:虽然`SUM()`函数会自动忽略`NULL`值,但在设计数据库和查询时,仍需注意`NULL`值的存在及其对结果的影响。 5. **使用场景**:`SUM()`函数不仅限于财务和销售数据,它还可以用于统计网站的访问量、计算用户积分总额等多种场景。 #### 结论 `SUM()`函数是MySQL中一个强大且灵活的工具,它允许你轻松计算数值列的总和。通过结合`WHERE`、`GROUP BY`以及`CASE`语句等SQL特性,你可以实现复杂的数据分析和报表生成任务。然而,在使用`SUM()`函数时,也需要注意数据类型、性能、精确度以及空值处理等问题,以确保查询结果的准确性和高效性。通过掌握`SUM()`函数的使用技巧,你将能够更加有效地利用MySQL进行数据分析和管理。
上一篇:
9.3.1 COUNT()统计函数
下一篇:
9.3.3 AVG()平均数函数
该分类下的相关小册推荐:
MySQL 实战 45 讲
MySQL从入门到精通(一)
MySQL从入门到精通(二)
MySQL必会核心问题
MySQL从入门到精通(五)
细说MySQL(零基础到高级应用)
MySQL8.0入门与实践
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(四)