跳至主要内容

COUNT() SQL 函数

COUNT() 可用于统计满足特定条件的行数。通过本教程学习如何使用它。
· 3分钟 阅读

使用 AI 探索

不言而喻,统计行数或取值是数据分析中的重要环节。因此,SQL 提供了专门的函数来完成这项工作。无论是识别重复值、计算分组总数,还是筛选数据,COUNT() 函数都能派上用场。

在本文中,我将展示 COUNT() 的多种用法,从基础语法到结合 GROUP BY 和 HAVING 的更有意思的案例。您也可以考虑报名我们的 SQL Associate 认证,这是学习与提升简历的好方式。

什么是 SQL 中的 COUNT() 函数?

COUNT() 函数返回满足某个条件的行数。

SQL COUNT() 语法

COUNT() 的基本语法如下。

SELECT COUNT(column_name)
FROM table_name;

语法的不同变体可实现不同目的。

  • COUNT(*) 语法用于统计表中的总行数

  • COUNT(DISTINCT column) 语法用于统计某列中不重复值的数量

  • COUNT(CASE WHEN condition THEN column END) 语法用于统计满足条件的取值数量。

将 COUNT() 与 GROUP BY 搭配,可用于统计各组包含的行数。

将 COUNT() 与 HAVING 搭配,可根据每组的行数来筛选分组。

我们将通过下面的示例来说明。

SQL COUNT() 函数示例

在线运行和编辑此教程中的代码

运行代码

使用 COUNT(*) 统计行数

名为 products 的表包含公司销售的所有产品。COUNT(*) 子句可用于计算表中的行数。

SELECT
    COUNT(*) AS number_of_rows
FROM products

number_of_rows

321

使用 COUNT(DISTINCT …) 统计唯一值

COUNT(DISTINCT column) 语法用于统计某列中唯一值的数量。

例如,在 products 表中,每个产品都有对应的品牌。我们可以统计表中唯一的产品数量和品牌数量。

SELECT
    COUNT(DISTINCT product_id) AS unique_product_count,
    COUNT(DISTINCT brand_id) AS unique_brand_count
FROM products

unique_product_count

unique_brand_count

321

9

结合 COUNT() 与 CASE WHEN 统计满足条件的行

COUNT(CASE WHEN condition THEN column END) 语法可用于计算满足某条件的行数。

例如,在 products 表中,每个产品都有一个 list_price。我们可以统计“expensive”(标价不低于 $500)的产品数量,以及其他产品的数量。

SELECT
    COUNT(CASE WHEN list_price >= 500 THEN product_id END) AS expensive_product_count,
   COUNT(CASE WHEN list_price < 500 THEN product_id END) AS cheap_product_count
FROM products

expensive_product_count

cheap_product_count

213

108

结合 COUNT() 与 GROUP BY 统计各组行数

COUNT() 可与 GROUP BY 搭配,用于获取每个分组中的行数。

例如,products 表包含 2016 至 2019 年的自行车型号。要查看各年份的分布情况,可以使用 COUNT(product_id) 并配合 GROUP BY model_year 来统计每年的产品数量。

SELECT
    model_year,
    COUNT(product_id) AS product_count
FROM products
GROUP BY model_year

model_year

product_count

2016

26

2017

85

2018

204

2019

6

结合 COUNT()、GROUP BY 与 HAVING 筛选分组

在示例 4 中,我们看到 COUNT() 可与 GROUP BY 一起使用。我们还可以借助 HAVING 子句,基于每组的行数来筛选分组。

例如,要找出产品数少于 50 的年份,可以使用以下语法。

SELECT
   model_year
FROM products
GROUP BY model_year
HAVING COUNT(product_id) < 50

year_with_less_than_50_pdt

2016

2019

技术要求

COUNT() 是现代 SQL 各版本均可使用的函数。DataCamp 提供针对性的课程,帮助您在所选数据库系统的语境下掌握 SQL。以下是一些入门选项。我认为 Oracle 的差异可能最大,因为它有一些特定函数和额外功能。

进一步学习 SQL

继续在 DataCamp 学习 SQL。我还写了几篇其他教程供您入门,希望对您有所帮助。

另外,也可以考虑我们的 SQL Associate 认证,我认为这对您的简历很有帮助。

Travis Tang

作者

Travis Tang

作为抖音的数据科学家兼佐治亚理工学院硕士生,我对数据科学怀有与生俱来的热情,并开辟了一条将技术、风险与持续自我提升相融合的独特职业路径。在 Merchant Platform 担任数据科学家期间,我运用复杂的数据模型降低风险、打击欺诈,每周为公司节省数千美元。我通过大量自学不断打磨专业能力,获得多家知名机构的认证,并熟练掌握深度学习、TensorFlow 和社会网络分析等领域。在 DataCamp 及其他教育平台上,我以此积累的知识启发并教育他人,在数据科学领域开辟新路径,也证明了只要有决心并掌握正确的数据,任何风险都能转化为机遇。

SQL COUNT() 常见问题

COUNT() 能只统计特定的行吗?

可以,您可以将 WHERE 子句与 COUNT() 搭配,只统计满足特定条件的行。例如:

SELECT COUNT(*) FROM employees WHERE department = 'Sales';
COUNT(*) 与 COUNT(column_name) 有什么区别?

COUNT(*) 会统计表中的所有行,包括含有 NULL 的行。COUNT(column_name) 只统计指定列不为 NULL 的行。

可以用 COUNT() 统计去重后的值吗?

可以,您可以将 COUNT() 与 DISTINCT 关键字结合,统计某列中的唯一值:

SELECT COUNT(DISTINCT department) FROM employees;
COUNT() 如何处理重复行?

默认情况下,COUNT(*) 会统计所有行,包括重复行。若只统计唯一行,请使用 COUNT(DISTINCT column_name)。

主题