SQL Server Count()函数

在本教程中,将学习如何使用SQL Server COUNT()函数来获取集合中的项目数。

SQL Server COUNT()是一个聚合函数,它返回在集合中找到的项目数。

以下是COUNT()函数的语法:

COUNT([ALL | DISTINCT  ] expression)

在这个语法中:

  • ALL指示COUNT()函数应用于所有值。 ALL是默认值。
  • DISTINCT指示COUNT()函数返回唯一的非NULL值的数量。
  • expression是除image, textntext之外的任何类型的表达式。请注意,不能在表达式中使用子查询或聚合函数。

COUNT()函数有另一种形式,如下所示:

COUNT(*)

在这种形式中,COUNT(*)返回指定表中的行数。COUNT(*)不支持DISTINCT并且不带参数。它分别计算每一行,并包含包含NULL值的行。

综上所述:

  • COUNT(*)计算集合中的项目数,它包括NULL和重复值
  • COUNT(ALL expression)计算集合中每行的表达式,并返回非NULL值的数量。
  • COUNT(DISTINCT expression)计算集合中每行的表达式,并返回唯一的NULL空值的数量。

SQL Server COUNT()函数:简单示例

以下语句创建一个名为t的新表,将一些数据插入表中,并根据它查询数据:

CREATE TABLE t(
    val INT
);

INSERT INTO t(val)
VALUES(1),(2),(2),(3),(null),(null),(4),(5);

SELECT
    val
FROM
    t;

执行上面查询语句,得到以下结果:

查询结果

1. SQL Server COUNT(*)示例

COUNT(*)返回指定表中的所有行,如以下语句所示:

SELECT
    COUNT(*) val_count
FROM
    t;

执行上面查询语句,得到以下结果:

val_count
-----------
8

(1 row affected)

2. SQL Server COUNT(DISTINCT expression)示例

以下示例使用COUNT(DISTINCT expression)返回t表中唯一的非null值的数量:

SELECT
    COUNT(DISTINCT val) val_count
FROM
    t;

执行上面查询语句,得到以下结果:

val_count
-----------
5
Warning: Null value is eliminated by an aggregate or other SET operation.

(1 row affected)

3. Server COUNT(DISTINCT expression)示例
以下示例使用COUNT(DISTINCT expression)返回t表中的非NULL值的数量:

SELECT
    COUNT(val)
FROM
    t;

执行上面查询语句,得到以下结果:

val_count
-----------
6
Warning: Null value is eliminated by an aggregate or other SET operation.

(1 row affected)

4. SQL Server COUNT()函数示例

以下语句返回products表中的产品数量:

SELECT 
    COUNT(*) product_count
FROM
    production.products;

执行上面查询语句,得到以下结果:

product_count
-------------
321

(1 row affected)

5. SQL Server COUNT()带有GROUP BY子句示例

以下语句使用COUNT(*)函数查找每个产品类别中的产品数:

SELECT 
    category_name,
    COUNT(*) product_count
FROM
    production.products p
    INNER JOIN production.categories c 
    ON c.category_id = p.category_id
GROUP BY 
    category_name
ORDER BY
    product_count DESC;

执行上面查询语句,得到以下结果:

category_name        product_count
-------------------- -------------
Cruisers Bicycles    78
Mountain Bikes       60
Road Bikes           60
Children Bicycles    59
Comfort Bicycles     30
Electric Bikes       24
Cyclocross Bicycles  10

(7 rows affected)

在此示例中,首先,GROUP BY子句使用类别名称将产品分成组,然后将COUNT()函数应用于每个分组。

6. SQL Server COUNT()带有HAVING子句示例

以下语句返回每个品牌和产品数量。 此外,它仅返回产品数量大于20的品牌:

SELECT 
    brand_name,
    COUNT(*) product_count
FROM
    production.products p
    INNER JOIN production.brands c 
    ON c.brand_id = p.brand_id
GROUP BY 
    brand_name
HAVING
    COUNT(*) > 20
ORDER BY
    product_count DESC;

执行上面查询语句,得到以下结果:

分组统计

在本教程中,学习了如何使用SQL Server COUNT()函数来查找集合中找到的项目数。


上一篇: SQL Server聚合函数 下一篇: SQL Server日期函数