MariaDB COUNT...DISTINCT 函数的基础用法与实例
本文将介绍一个常用的聚合函数,即 COUNT...DISTINCT
函数,它用于统计某个列或表达式的不同值的个数。
MariaDB 是一个开源的关系型数据库管理系统,它是 MySQL 的一个分支。MariaDB 提供了许多 SQL 函数,用于对数据进行各种操作和计算。本文将介绍一个常用的聚合函数,即 COUNT...DISTINCT
函数,它用于统计某个列或表达式的不同值的个数。
语法
COUNT...DISTINCT
函数的语法如下:
COUNT(DISTINCT expr)
其中,expr
可以是一个列名,也可以是一个表达式,比如 col1 + col2
。COUNT...DISTINCT
函数会忽略 NULL
值,只计算非空的不同值的个数。如果 expr
是一个常量,或者没有匹配的行,那么 COUNT...DISTINCT
函数的返回值为 0。
实例
下面我们来看一些 COUNT...DISTINCT
函数的实例,以便更好地理解它的用法。我们将使用一个名为 students
的表,它包含了学生的姓名、性别、年龄、班级和成绩等信息。表的结构和部分数据如下:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(20),
gender CHAR(1),
age INT,
class VARCHAR(10),
score INT
);
INSERT INTO students VALUES
(1, 'Alice', 'F', 18, 'A1', 85),
(2, 'Bob', 'M', 19, 'A2', 90),
(3, 'Charlie', 'M', 18, 'A1', 80),
(4, 'David', 'M', 20, 'A3', 95),
(5, 'Eve', 'F', 19, 'A2', 88),
(6, 'Frank', 'M', 18, 'A1', 82),
(7, 'Grace', 'F', 20, 'A3', 92),
(8, 'Helen', 'F', 19, 'A2', 86),
(9, 'Iris', 'F', 18, 'A1', 84),
(10, 'Jack', 'M', 20, 'A3', 94);
Example 1: 统计学生表中不同性别的个数
我们可以使用 COUNT...DISTINCT
函数,对 gender
列进行统计,得到学生表中不同性别的个数。SQL 语句如下:
SELECT COUNT(DISTINCT gender) AS gender_count FROM students;
运行结果如下:
+--------------+
| gender_count |
+--------------+
| 2 |
+--------------+
这说明学生表中有两种性别,分别是男性和女性。
Example 2: 统计学生表中不同年龄的个数
我们也可以使用 COUNT...DISTINCT
函数,对 age
列进行统计,得到学生表中不同年龄的个数。SQL 语句如下:
SELECT COUNT(DISTINCT age) AS age_count FROM students;
运行结果如下:
+-----------+
| age_count |
+-----------+
| 3 |
+-----------+
这说明学生表中有三种年龄,分别是 18 岁,19 岁和 20 岁。
Example 3: 统计学生表中不同班级的个数
我们还可以使用 COUNT...DISTINCT
函数,对 class
列进行统计,得到学生表中不同班级的个数。SQL 语句如下:
SELECT COUNT(DISTINCT class) AS class_count FROM students;
运行结果如下:
+-------------+
| class_count |
+-------------+
| 3 |
+-------------+
这说明学生表中有三个班级,分别是 A1,A2 和 A3。
Example 4: 统计学生表中不同成绩的个数
我们也可以使用 COUNT...DISTINCT
函数,对 score
列进行统计,得到学生表中不同成绩的个数。SQL 语句如下:
SELECT COUNT(DISTINCT score) AS score_count FROM students;
运行结果如下:
+-------------+
| score_count |
+-------------+
| 9 |
+-------------+
这说明学生表中有九种成绩,分别是 80,82,84,85,86,88,90,92,94 和 95。
Example 5: 统计学生表中不同性别和年龄组合的个数
我们还可以使用 COUNT...DISTINCT
函数,对 gender
和 age
的组合进行统计,得到学生表中不同性别和年龄组合的个数。SQL 语句如下:
SELECT COUNT(DISTINCT gender, age) AS gender_age_count FROM students;
运行结果如下:
+------------------+
| gender_age_count |
+------------------+
| 6 |
+------------------+
这说明学生表中有六种性别和年龄的组合,分别是男性 18 岁,男性 19 岁,男性 20 岁,女性 18 岁,女性 19 岁和女性 20 岁。
相关函数
除了 COUNT...DISTINCT
函数,MariaDB 还提供了一些其他的聚合函数,用于对数据进行不同的统计和计算。下面我们简单介绍一些常用的聚合函数,并给出一些例子。
-
COUNT
函数:用于统计某个列或表达式的非空值的个数。如果使用*
作为参数,那么会统计所有的行数,包括NULL
值。例如:-- 统计学生表中的总行数 SELECT COUNT(*) AS total_count FROM students; -- 统计学生表中非空姓名的个数 SELECT COUNT(name) AS name_count FROM students;
-
SUM
函数:用于计算某个列或表达式的非空值的总和。如果没有匹配的行,或者所有的值都是NULL
,那么返回值为NULL
。例如:-- 计算学生表中所有学生的成绩总和 SELECT SUM(score) AS score_sum FROM students; -- 计算学生表中每个班级的成绩总和 SELECT class, SUM(score) AS score_sum FROM students GROUP BY class;
-
AVG
函数:用于计算某个列或表达式的非空值的平均值。如果没有匹配的行,或者所有的值都是NULL
,那么返回值为NULL
。例如:-- 计算学生表中所有学生的成绩平均值 SELECT AVG(score) AS score_avg FROM students; -- 计算学生表中每个班级的成绩平均值 SELECT class, AVG(score) AS score_avg FROM students GROUP BY class;
-
MIN
函数:用于找出某个列或表达式的非空值的最小值。如果没有匹配的行,或者所有的值都是NULL
,那么返回值为NULL
。例如:-- 找出学生表中所有学生的成绩最低值 SELECT MIN(score) AS score_min FROM students; -- 找出学生表中每个班级的成绩最低值 SELECT class, MIN(score) AS score_min FROM students GROUP BY class;
-
MAX
函数:用于找出某个列或表达式的非空值的最大值。如果没有匹配的行,或者所有的值都是NULL
,那么返回值为NULL
。例如:-- 找出学生表中所有学生的成绩最高值 SELECT MAX(score) AS score_max FROM students; -- 找出学生表中每个班级的成绩最高值 SELECT class, MAX(score) AS score_max FROM students GROUP BY class;
结论
本文介绍了 MariaDB 的一个常用的聚合函数,即 COUNT...DISTINCT
函数,它用于统计某个列或表达式的不同值的个数。我们还介绍了一些其他的聚合函数,如 COUNT
,SUM
,AVG
,MIN
和 MAX
,它们用于对数据进行不同的统计和计算。这些函数在数据分析和报表中非常有用,可以帮助我们快速地获取数据的概况和特征。