SQL Count() 函数
SQL COUNT() 函数
Section titled “SQL COUNT() 函数”COUNT() 函数是一个聚合函数(aggregate function),它返回符合指定条件的行数。它对于汇总数据至关重要,例如查找你有多少客户或某天下了多少订单。
SQL COUNT(column_name) 语法
Section titled “SQL COUNT(column_name) 语法”COUNT(column_name) 函数返回指定列中非 NULL 值的数量。
SELECT COUNT(column_name) FROM table_name [WHERE condition];
SQL COUNT(*) 语法
Section titled “SQL COUNT(*) 语法”COUNT(*) 函数返回表中满足 WHERE 子句(如果存在)的总行数,无论任何特定列中是否有 NULL 值。它计算每一行。
SELECT COUNT(*) FROM table_name [WHERE condition];
SQL COUNT(DISTINCT column_name) 语法
Section titled “SQL COUNT(DISTINCT column_name) 语法”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)的支持。
演示数据库模式
Section titled “演示数据库模式”对于本教程中的示例,我们假设有一个 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 COUNT(column_name) 示例
Section titled “SQL COUNT(column_name) 示例”以下 SQL 语句计算已分配 ShipperID(即 ShipperID 不为 NULL)的订单数量。
SELECT COUNT(ShipperID) AS NumberOfShippedOrdersFROM Orders;此查询仅计算 ShipperID 有值的行。如果某个订单尚未发货且 ShipperID 是 NULL,则该行不会包含在此特定计数中。
SQL COUNT(*) 示例
Section titled “SQL COUNT(*) 示例”以下 SQL 语句计算 Orders 表中的订单总数:
SELECT COUNT(*) AS TotalNumberOfOrdersFROM Orders;如果你想计算特定客户(例如 CustomerID 为 7)的订单:
SELECT COUNT(*) AS OrdersFromCustomer7FROM OrdersWHERE CustomerID = 7;SQL COUNT(DISTINCT column_name) 示例
Section titled “SQL COUNT(DISTINCT column_name) 示例”以下 SQL 语句计算已下订单的唯一客户数量:
SELECT COUNT(DISTINCT CustomerID) AS NumberOfUniqueCustomersFROM 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 值的数量。