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, ...;
参数
exprexpr一个需要统计数量的表达式。它可以是一个列名,也可以是一个表达式。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。