摘要:在本教程中,您将学习如何使用 MySQL COUNT()
函数返回表中的行数。
MySQL COUNT()
函数简介
COUNT()
函数是一个聚合函数,它返回表中的行数。 COUNT()
函数允许您计算所有行或仅计算符合指定条件的行。
COUNT()
函数具有三种形式: COUNT(*)
、 COUNT(expression)
和COUNT(DISTINCT expression)
。
COUNT(*)
函数
COUNT(*)
函数返回SELECT
语句返回的结果集中的行数。 COUNT(*)
返回行数,包括重复行、非 NULL 行和NULL
行。
COUNT(expression)
COUNT(expression)
返回不包含NULL
值的行数作为表达式的结果。
COUNT(DISTINCT expression)
COUNT(DISTINCT expression)
返回不包含NULL
值的不同行数作为表达式的结果。
COUNT()
函数的返回类型是BIGINT
。如果没有找到匹配的行,则COUNT()
函数返回 0。
MySQL COUNT()
函数图解
设置样本表
首先,创建一个名为count_demos
的表:
CREATE TABLE count_demos (
id INT AUTO_INCREMENT PRIMARY KEY,
val INT
);
Code language: SQL (Structured Query Language) (sql)
其次,将一些行插入count_demos
表中:
INSERT INTO count_demos(val)
VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5);
Code language: SQL (Structured Query Language) (sql)
三、从count_demos
表中查询数据:
SELECT * FROM count_demos;
Code language: SQL (Structured Query Language) (sql)
MySQL COUNT(*)
示例
以下语句使用COUNT(*)
函数返回count_demos
表中的所有行:
SELECT COUNT(*) FROM count_demos;
Code language: SQL (Structured Query Language) (sql)
此示例使用COUNT(*)
函数和WHERE
子句指定一个条件,仅对val
列中的值为 2 的行进行计数:
SELECT COUNT(*)
FROM count_demos
WHERE val = 2;
Code language: SQL (Structured Query Language) (sql)
MySQL COUNT(expression)
示例
如果在COUNT()
函数中指定val
列,则COUNT()
函数将仅对val
列中包含非 NULL 值的行进行计数:
SELECT COUNT(val)
FROM count_demos;
Code language: SQL (Structured Query Language) (sql)
请注意,结果中不包含两个NULL
值。
MySQL COUNT(DISTINCT expression)
示例
此示例使用COUNT(DISTINCT expression)
对列val
中的非 NULL 值和不同值进行计数:
SELECT COUNT(DISTINCT val)
FROM count_demos;
Code language: SQL (Structured Query Language) (sql)
MySQL COUNT()
函数实例
我们将在接下来的示例中使用示例数据库中的products
表:
A) 在GROUP BY
示例中使用 MySQL COUNT(*)
函数
COUNT(*)
函数通常与GROUP BY
子句一起使用,以返回每个组中的元素数量。
例如,此语句使用COUNT()
函数和GROUP BY
子句来返回每个产品系列中的产品数量:
SELECT
productLine,
COUNT(*)
FROM
products
GROUP BY productLine;
Code language: SQL (Structured Query Language) (sql)
同样,此示例使用COUNT(*)
函数查找每个供应商提供的产品数量:
SELECT
productVendor,
COUNT(*)
FROM
products
GROUP BY productVendor
ORDER BY COUNT(*) DESC;
Code language: SQL (Structured Query Language) (sql)
B) 将 MySQL COUNT(*)
与HAVING
子句一起使用的示例
要查找至少提供 9 种产品的供应商,请在HAVING
子句中使用COUNT(*)
函数,如以下查询所示:
SELECT
productVendor,
COUNT(*)
FROM
products
GROUP BY productVendor
HAVING COUNT(*) >= 9
ORDER BY COUNT(*) DESC;
Code language: SQL (Structured Query Language) (sql)
C) MySQL COUNT IF
示例
您可以在COUNT()
函数中使用控制流表达式和函数(例如IF
、 IFNULL
和CASE
)来计算值与条件匹配的行数。
请参阅示例数据库中的以下orders
表:
以下查询使用COUNT()
和IF
函数从orders
表中查找已取消、保留和有争议的订单数量:
SELECT
COUNT(IF(status = 'Cancelled', 1, NULL)) 'Cancelled',
COUNT(IF(status = 'On Hold', 1, NULL)) 'On Hold',
COUNT(IF(status = 'Disputed', 1, NULL)) 'Disputed'
FROM
orders;
Code language: SQL (Structured Query Language) (sql)
如果订单状态为取消、保留或有争议,则IF()
函数返回 1 ,否则返回NULL
。
COUNT
函数只统计 1,不统计 NULL 值,因此查询根据对应的状态返回订单数。
在本教程中,您学习了使用 MySQL COUNT
函数计算表中行数的各种技术。