MySQL COUNT()函数

时间:2019-11-20 08:52:16  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL COUNT()函数返回表中的行数。

MySQL COUNT()函数简介

COUNT()函数是一个聚合函数,它返回表中的行数。
COUNT()函数允许您计数所有行或仅对符合指定条件的行进行计数。

COUNT()函数具有三种形式:COUNT(*),COUNT(表达式)和COUNT(DISTINCT表达式)。

COUNT(*)函数

COUNT()函数返回SELECT语句返回的结果集中的行数。
COUNT(
)返回行数,包括重复行,非NULL和NULL行。

COUNT(表达式)

COUNT(表达式)返回不包含NULL值的行数作为表达式的结果。

COUNT(DISTINCT表达式)

COUNT(DISTINCT表达式)作为表达式的结果返回不包含NULL值的不同行的数量。

COUNT()函数的返回类型为BIGINT。
如果找不到匹配的行,则COUNT()函数将返回0。

MySQL COUNT()函数图

设置样本表

首先,创建一个名为count_demos的表:

CREATE TABLE count_demos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    val INT
);

其次,将一些行插入count_demos表中:

INSERT INTO count_demos(val) 
VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5);

第三,从count_demos表中查询数据:

SELECT * FROM count_demos;

MySQL COUNT(*)示例

以下语句使用COUNT(*)函数返回count_demos表中的所有行:

SELECT COUNT(*) FROM count_demos;

本示例将COUNT(*)函数与WHERE子句一起使用以指定条件以仅对val列中值为2的行进行计数:

SELECT COUNT(*) 
FROM count_demos
WHERE val = 2;

MySQL COUNT(表达式)示例

如果您在COUNT()函数中指定val列,则COUNT()函数将仅对val列中具有非NULL值的行进行计数:

SELECT COUNT(val) 
FROM count_demos;

请注意,结果中不包含两个NULL值。

MySQL COUNT(DISTINCT表达式)示例

本示例使用COUNT(DISTINCT表达式)对val列中的非NULL和不同值进行计数:

SELECT COUNT(DISTINCT val)
FROM count_demos;

MySQL COUNT()函数实用示例

下面的示例将使用示例数据库中的产品表:

A)使用MySQL COUNT(*)函数和GROUP BY示例

COUNT(*)函数通常与GROUP BY子句一起使用,以返回每个组中的元素数。

例如,此语句将COUNT()函数与GROUP BY子句一起使用,以返回每个产品系列中的产品数:

SELECT 
    productLine, 
    COUNT(*)
FROM
    products
GROUP BY productLine;

同样,此示例使用COUNT(*)函数查找每个供应商提供的产品数量:

SELECT 
    productVendor, 
    COUNT(*)
FROM
    products
GROUP BY productVendor
ORDER BY COUNT(*) DESC;

B)将MySQL COUNT(*)与HAVING子句示例一起使用

要查找至少提供9种产品的供应商,请在HAVING子句中使用COUNT(*)函数,如以下查询所示:

SELECT 
    productVendor, 
    COUNT(*)
FROM
    products
GROUP BY productVendor
HAVING COUNT(*) >= 9
ORDER BY COUNT(*) DESC;

C)MySQL COUNT IF示例

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

请参阅示例数据库中的以下订单表:

以下查询将COUNT()与IF函数一起使用,以从订单表中查找已取消,保留和有争议的订单的数量:

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;

如果订单的状态被取消,保留或有争议,则IF()函数将返回1,否则返回NULL。

COUNT函数仅计算1,而不是NULL值,因此,查询根据相应的状态返回订单数。

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