首页
技术小册
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.1 COUNT()统计函数 在MySQL中,`COUNT()`函数是一个非常重要的聚合函数,它用于统计查询结果中的行数或满足特定条件的非NULL值的数量。无论是在数据分析、报表生成还是简单的数据验证中,`COUNT()`函数都扮演着至关重要的角色。本章将深入探讨`COUNT()`函数的用法、常见应用场景以及如何通过它来获取有价值的数据洞察。 #### 9.3.1.1 COUNT()函数基础 `COUNT()`函数的基本语法如下: ```sql COUNT([DISTINCT] expr) ``` - `expr`:是可选的,代表要计数的列或表达式。如果不指定`expr`,则默认计数所有行(包括包含NULL值的行)。 - `DISTINCT`:是可选的,用于指示只计数唯一(不同)的值。 `COUNT()`函数主要有两种使用方式: 1. **COUNT(*)**:计算包括所有NULL值在内的行数。这是最常用的形式,因为它直接反映了查询结果中的行数,不考虑列的具体值。 2. **COUNT(列名)**:计算指定列中非NULL值的数量。如果列中存在NULL值,这些值将被忽略不计。 #### 9.3.1.2 COUNT(*) vs COUNT(列名) 理解`COUNT(*)`和`COUNT(列名)`之间的区别对于编写高效和准确的SQL查询至关重要。 - **COUNT(*)**:它统计的是表中的行数,包括所有行,不论列中的值是否为NULL。这通常用于快速获取表中的总行数,因为MySQL优化器可以高效地处理这种查询,而无需读取每一列的数据。 - **COUNT(列名)**:它统计的是指定列中非NULL值的数量。这种用法在需要知道某列具体有多少个非空值时非常有用。但是,如果目标是计算行数,且不关心列的具体值,那么使用`COUNT(*)`更为高效。 #### 9.3.1.3 使用COUNT()进行数据分析 `COUNT()`函数在数据分析中扮演着核心角色,以下是几个常见的应用场景: 1. **统计表中的总行数**: ```sql SELECT COUNT(*) FROM employees; ``` 这条查询将返回`employees`表中的总行数,无论各列的值如何。 2. **统计特定条件下的行数**: ```sql SELECT COUNT(*) FROM orders WHERE order_status = 'shipped'; ``` 此查询计算状态为`shipped`的订单数量。 3. **统计非空值的数量**: ```sql SELECT COUNT(email) FROM users; ``` 如果`users`表中的`email`列包含NULL值,这条查询将只计算那些有有效电子邮件地址的用户数量。 4. **结合DISTINCT关键字使用**: ```sql SELECT COUNT(DISTINCT department_id) FROM employees; ``` 这个查询计算`employees`表中不同`department_id`的数量,即部门的总数。 #### 9.3.1.4 性能优化 虽然`COUNT()`函数本身在大多数情况下都足够高效,但在处理大型数据集时,了解其性能影响并采取相应的优化措施是非常重要的。 - **使用索引**:如果`COUNT()`与`WHERE`子句结合使用,并且`WHERE`子句中的列是索引列,那么MySQL可以利用索引来加速查询。但是,对于`COUNT(*)`而言,索引通常不会带来太大性能提升,因为MySQL需要扫描整个表来计算行数。 - **考虑查询缓存**:在MySQL中,如果查询结果可以被缓存,那么重复的`COUNT()`查询可能会从缓存中获取结果,从而提高性能。但是,随着数据的变化,缓存可能会失效,因此这不是一个长期的解决方案。 - **分区表**:对于非常大的表,考虑使用分区表。通过分区,可以将数据分布在多个物理部分中,从而允许MySQL并行处理查询,提高`COUNT()`等聚合函数的性能。 #### 9.3.1.5 注意事项 - **空值处理**:使用`COUNT(列名)`时,要意识到它会忽略NULL值。这有时会导致意外的结果,特别是当表中的数据完整性不高时。 - **精确性与性能**:在追求查询精确性的同时,也要考虑其对性能的影响。在某些情况下,可能需要在精确性和性能之间做出权衡。 - **结合GROUP BY使用**:`COUNT()`经常与`GROUP BY`子句结合使用,以按某个或多个列的值对结果进行分组并统计每组中的行数。这在进行数据汇总和分析时非常有用。 #### 9.3.1.6 结论 `COUNT()`函数是MySQL中不可或缺的一个聚合函数,它提供了强大的计数能力,无论是在数据验证、报表生成还是复杂的数据分析中。通过深入理解`COUNT()`函数的用法和性能特点,并结合实际场景灵活应用,可以有效地提高数据处理的效率和准确性。在编写SQL查询时,始终要关注查询的精确性和性能,并根据需要选择合适的`COUNT()`使用方式。
上一篇:
9.3 聚合函数查询
下一篇:
9.3.2 SUM()求和函数
该分类下的相关小册推荐:
MySQL从入门到精通(二)
MySQL从入门到精通(五)
MySQL从入门到精通(一)
SQL零基础到熟练应用(增删改查)
MySQL必会核心问题
MySQL 实战 45 讲
细说MySQL(零基础到高级应用)
MySQL从入门到精通(四)
MySQL8.0入门与实践