Skip to content

SQL Count() 函数

COUNT() 函数是一个聚合函数(aggregate function),它返回符合指定条件的行数。它对于汇总数据至关重要,例如查找你有多少客户或某天下了多少订单。

COUNT(column_name) 函数返回指定列中非 NULL 值的数量。

SELECT COUNT(column_name) FROM table_name [WHERE condition];

COUNT(*) 函数返回表中满足 WHERE 子句(如果存在)的总行数,无论任何特定列中是否有 NULL 值。它计算每一行。

SELECT COUNT(*) FROM table_name [WHERE condition];

COUNT(DISTINCT column_name) 函数返回指定列中唯一、非 NULL 值的数量。

SELECT COUNT(DISTINCT column_name) FROM table_name [WHERE condition];

注意:COUNT(DISTINCT column_name) 是标准 SQL,并得到大多数现代数据库系统(如 PostgreSQL、MySQL、SQL Server 和 Oracle)的支持。

对于本教程中的示例,我们假设有一个 Orders 表,包含以下相关列:

Orders Table:

  • OrderID (INT, Primary Key)
  • CustomerID (INT)
  • OrderDate (DATE)
  • ShipperID (INT, might be NULL if not yet shipped)

以及一个 Products 表:

Products Table:

  • ProductID (INT, Primary Key)
  • ProductName (VARCHAR)
  • SupplierID (INT)
  • Category (VARCHAR)

以下 SQL 语句计算已分配 ShipperID(即 ShipperID 不为 NULL)的订单数量。

SELECT COUNT(ShipperID) AS NumberOfShippedOrders
FROM Orders;

此查询仅计算 ShipperID 有值的行。如果某个订单尚未发货且 ShipperID 是 NULL,则该行不会包含在此特定计数中。

以下 SQL 语句计算 Orders 表中的订单总数:

SELECT COUNT(*) AS TotalNumberOfOrders
FROM Orders;

如果你想计算特定客户(例如 CustomerID 为 7)的订单:

SELECT COUNT(*) AS OrdersFromCustomer7
FROM Orders
WHERE CustomerID = 7;

以下 SQL 语句计算已下订单的唯一客户数量:

SELECT COUNT(DISTINCT CustomerID) AS NumberOfUniqueCustomers
FROM Orders;

实际应用:COUNT() 被广泛用于报告和分析。例如:

  • 计算活跃用户:SELECT COUNT(UserID) FROM Users WHERE IsActive = TRUE;
  • 查找每个类别的产品数量:SELECT Category, COUNT(*) FROM Products GROUP BY Category;
  • 检查某一天访问网页的唯一访客数量。

学习难点:常见的困惑在于 COUNT(*) 和 COUNT(column_name) 之间的区别。记住,COUNT(*) 计算符合 WHERE 子句的所有行,而 COUNT(column_name) 计算该特定列中非 NULL 值的数量。