在上周的“在 MySQL 中获取行计数”文章中,我们采用了原生的 COUNT() 函数的不同变体来计算一个 MySQL 表中的行数。在今天的后续文章中,我们将以更复杂的方式使用 COUNT() 函数来计算唯一值以及满足条件的值。
计算非重复项
COUNT(DISTINCT) 函数返回具有唯一非 NULL 值的行数。因此,包含 DISTINCT 关键字可以消除计数中的重复行。它的语法是:
COUNT(DISTINCT expr,[expr...])
与正则 COUNT() 函数一样,上面的 expr 参数可以是任何给定的表达式,包括指定的列、所有列(*)、函数返回值或表达式(如 IF/CASE 语句)。
简单的例子
假设我们有以下 clients 表:
+------------+-------------+
| last_name | first_name |
+------------+-------------+
| Tannen | Biff |
+------------+-------------+
| McFly | Marty |
+------------+-------------+
| Brown | Dr. Emmett |
+------------+-------------+
| McFly | George |
+------------+-------------+
调用 COUNT(*) 将返回所有行的数量(4),而在 last_name 上使用 COUNT DISTINCT 将计算重复姓氏的行为 1,这样我们得到总数 3:
SELECT COUNT(*), COUNT(DISTINCT last_name) FROM clients;
+----------+---------------------------+
| COUNT(*) | COUNT(DISTINCT last_name) |
+----------+---------------------------+
| 4 | 3 |
+----------+