MySQL COUNT

摘要:在本教程中,您将学习如何使用 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)
MySQL COUNT 星示例

此示例使用COUNT(*)函数和WHERE子句指定一个条件,仅对val列中的值为 2 的行进行计数:

SELECT COUNT(*) 
FROM count_demos
WHERE val = 2;Code language: SQL (Structured Query Language) (sql)
MySQL COUNT 星号与 WHERE 子句

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 DISTINCT expr 示例

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)
MySQL COUNT 与 GROUP BY 子句示例

同样,此示例使用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)
MySQL COUNT 与 HAVING 子句示例

C) MySQL COUNT IF示例

您可以在COUNT()函数中使用控制流表达式和函数(例如IFIFNULLCASE )来计算值与条件匹配的行数。

请参阅示例数据库中的以下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 IF 示例

在本教程中,您学习了使用 MySQL COUNT函数计算表中行数的各种技术。

本教程有帮助吗?