能否同时使用MySQL的COUNT()和DISTINCT函数?
是的,你可以同时使用COUNT()和DISTINCT函数来显示唯一行的计数。
语法如下 −
SELECT COUNT(DISTINCT 列名) AS 任意变量名 FROM 表名;
为了理解上述语法,让我们先创建一个表。
创建表的查询语句如下 −
mysql> create table CountDistinctDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (3.11 sec)
使用insert命令往表中插入记录。插入查询如下 −
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.48 sec)
mysql> insert into CountDistinctDemo(Name) values('Bob');
Query OK, 1 row affected (0.43 sec)
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.26 sec)
mysql> insert into CountDistinctDemo(Name) values('John');
Query OK, 1 row affected (0.27 sec)
mysql> insert into CountDistinctDemo(Name) values('Bob');
Query OK, 1 row affected (0.35 sec)
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.98 sec)
mysql> insert into CountDistinctDemo(Name) values('John');
Query OK, 1 row affected (0.26 sec)
mysql> insert into CountDistinctDemo(Name) values('Sam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into CountDistinctDemo(Name) values('Mike');
Query OK, 1 row affected (0.53 sec)
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.31 sec)
mysql> insert into CountDistinctDemo(Name) values('David');
Query OK, 1 row affected (0.40 sec)
使用select语句显示表中的所有记录。
查询语句如下。
mysql> select *from CountDistinctDemo;
结果如下。
+----+-------+
| Id | Name |
+----+-------+
| 1 | Carol |
| 2 | Bob |
| 3 | Carol |
| 4 | John |
| 5 | Bob |
| 6 | Carol |
| 7 | John |
| 8 | Sam |
| 9 | Mike |
| 10 | Carol |
| 11 | David |
+----+-------+
11 rows in set (0.07 sec)
如果不使用DISTINCT函数,COUNT()函数将统计所有行的数量。
查询语句如下 −
mysql> select count(Name) as TotalName from CountDistinctDemo;
结果如下 −
+-----------+
| TotalName |
+-----------+
| 11 |
+-----------+
1 row in set (0.04 sec)
使用COUNT()函数和DISTINCT函数的联合查询语句如下 −
mysql> SELECT COUNT(DISTINCT Name) as UniqueName FROM CountDistinctDemo;
结果如下
+------------+
| UniqueName |
+------------+
| 6 |
+------------+
1 row in set (0.00 sec)
阅读更多:MySQL 教程
极客教程