MySQL COUNT() 函数使用指南
MySQL COUNT()
函数用于统计表达式代表的所有值的中的非 NULL 值的数量。
COUNT()
语法
这里是 MySQL COUNT()
函数的语法:
COUNT(expr)
我们通常在 SQL 中按如下方式使用 COUNT()
函数:
SELECT COUNT(expr), ...
FROM table_name
[WHERE ...];
或者按如下方式结合 GROUP BY
子句使用 COUNT()
函数:
SELECT COUNT(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUP BY group_expr1, group_expr2, ...;
参数
expr
expr
一个需要统计数量的表达式。它可以是一个列名,也可以是一个表达式。group_expr1, group_expr2, ...
- 用于分组的表达式或者列名。
返回值
COUNT(expr)
函数返回 SELECT
语句返回的所有行中的表达式代表的所有值的中的非 NULL
值的数量。
注意: 如果您使用 COUNT(*)
或者类似于 COUNT(1)
之类的语句,则会统计 NULL
值。
COUNT()
示例
我们将通过 student_score
表进行演示。让我们先创建演示表并插入测试数据。
DROP TABLE IF EXISTS `student_score`;
CREATE TABLE `student_score` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`subject` VARCHAR(255) NOT NULL,
`score` INT
);
INSERT INTO `student_score` (`name`, `subject`, `score`)
VALUES ('Tom', 'Math', 80),
('Tom', 'English', 90),
('Jim', 'Math', 84),
('Jim', 'English', 96),
('Tim', 'Math', NULL),
('Tim', 'English', 98);
以下是表中的数据:
+----+------+---------+-------+
| id | name | subject | score |
+----+------+---------+-------+
| 1 | Tom | Math | 80 |
| 2 | Tom | English | 90 |
| 3 | Jim | Math | 84 |
| 4 | Jim | English | 96 |
| 5 | Tim | Math | NULL |
| 6 | Tim | English | 98 |
+----+------+---------+-------+
COUNT()
简单例子
以下 SQL 语句返回 student_score
表中的所有行数。
SELECT COUNT(id) from student_score;
+-----------+
| COUNT(id) |
+-----------+
| 6 |
+-----------+
让我们再看一下 student_score
表中的所有分数的数量。
SELECT COUNT(score) from student_score;
+--------------+
| COUNT(score) |
+--------------+
| 5 |
+--------------+
这里,由于 score
列中有一个 NULL
值,因此 COUNT(score)
的结果为 5
.
COUNT()
结合 GROUP BY
让我们使用 COUNT()
结合 GROUP BY
来从更多的维度统计数量。
-
按科目统计成绩的数量
SELECT subject, COUNT(score) FROM student_score GROUP BY subject;
+---------+-----------+ | subject | COUNT(id) | +---------+-----------+ | Math | 2 | | English | 3 | +---------+-----------+
这里,MySQL 会根据
GROUP BY subject
首先按照subject
将结果集分组,然后在每个组内再执行COUNT(score)
。 -
按名称统计成绩的数量
SELECT name, COUNT(score) FROM student_score GROUP BY name;
+------+--------------+ | name | COUNT(score) | +------+--------------+ | Tom | 2 | | Jim | 2 | | Tim | 1 | +------+--------------+
这里,MySQL 会根据
GROUP BY name
首先按照name
将结果集分组,然后在每个组内再执行COUNT(score)
。由于 Tim 的数学分数为
NULL
,因此 Tim 的COUNT(score)
的结果为1
。