趋近智
GROUP BY 进行数据分组原始数据通常需要汇总,以便提供有价值的信息。最基本的汇总之一就是简单地计数:我们有多少客户?昨天下了多少订单?售出了多少种不同的产品?SQL 为此提供了一个专门的聚合函数:COUNT。
COUNT 函数统计满足特定条件的行数。我们来看看它的常见形式。
COUNT(*)COUNT 最直接的用法是使用星号 (*)。COUNT(*) 仅统计一个表或由 WHERE 子句定义的查询结果中的总行数。
语法:
SELECT COUNT(*)
FROM table_name;
示例:
假设我们有一个 Customers 表,如下所示:
| 客户ID | 名 | 姓 | 电子邮件 | 城市 |
|---|---|---|---|---|
| 1 | Alice | Smith | [email protected] | London |
| 2 | Bob | Jones | [email protected] | Manchester |
| 3 | Charlie | Brown | NULL | London |
| 4 | Diana | Prince | [email protected] | Birmingham |
| 5 | Edward | King | [email protected] | London |
要查找表中的客户总数,您将运行:
SELECT COUNT(*)
FROM Customers;
结果:
| 统计(*) |
|---|
| 5 |
此查询返回 5,因为 Customers 表中有五行。
COUNT(column_name)有时,您可能不想统计所有行,而是统计特定列中具有非 NULL 值的行数。为此,您将列名放在括号内。
语法:
SELECT COUNT(column_name)
FROM table_name;
示例:
使用相同的 Customers 表,我们来统计有多少客户提供了电子邮件地址。我们以 email 列为目标:
SELECT COUNT(email)
FROM Customers;
结果:
| 统计(email) |
|---|
| 4 |
请注意,结果是 4,而不是 5。这是因为 COUNT(email) 会忽略 email 列值为 NULL 的行(客户 ID 3)。COUNT(*) 统计行数,而 COUNT(column_name) 统计该列中所有行中的非 NULL 值。
COUNT(DISTINCT column_name)通常,您需要知道一个列中有多少个唯一值。例如,我们的客户居住在多少个不同的城市?在 COUNT 中使用 DISTINCT 关键字可以实现此目的。
语法:
SELECT COUNT(DISTINCT column_name)
FROM table_name;
示例:
我们来统计我们的 Customers 表中不同城市的数量:
SELECT COUNT(DISTINCT city)
FROM Customers;
结果:
| 统计(DISTINCT city) |
|---|
| 3 |
此查询返回 3,因为尽管有 5 行,但列出的城市是 'London'、'Manchester'、'London'、'Birmingham' 和 'London'。不同的城市是 London、Manchester 和 Birmingham。如果列中存在 NULL 值,则不计入 DISTINCT 统计。
COUNT 结果的默认列名(例如 COUNT(*) 或 COUNT(email))并不总是具有描述性。您可以使用 AS 关键字分配一个更具意义的名称,这会创建一个别名。
示例:
我们来重命名我们之前的示例的输出:
-- 客户总数
SELECT COUNT(*) AS total_customers
FROM Customers;
-- 有电子邮件的客户数量
SELECT COUNT(email) AS customers_with_email
FROM Customers;
-- 不同的客户城市数量
SELECT COUNT(DISTINCT city) AS distinct_customer_cities
FROM Customers;
结果:
| total_customers |
|---|
| 5 |
| customers_with_email |
|---|
| 4 |
| distinct_customer_cities |
|---|
| 3 |
使用别名可以使输出更清晰、更容易理解,特别是当您开始在单个查询中组合多个聚合函数时。
来自
Customers表的不同统计比较:总行数 vs. 非 NULL 电子邮件 vs. 不同城市。
COUNT 与 WHERE 结合使用像 COUNT 这样的聚合函数是在 WHERE 子句过滤行之后应用的。这意味着您可以统计满足特定条件的行数。
示例:
有多少客户居住在 London?
SELECT COUNT(*) AS london_customers
FROM Customers
WHERE city = 'London';
结果:
| london_customers |
|---|
| 3 |
数据库首先过滤 Customers 表以仅包含 city 为 'London' 的行,然后 COUNT(*) 统计那些过滤后的行。
COUNT 函数是汇总数据的基本构成要素。您会经常使用它,通常与 GROUP BY 子句结合使用(我们很快就会介绍),以统计不同类别中的项目,例如统计每个客户下的订单数量。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造