聚合函数从一组行计算单一值——COUNT、SUM、AVG、MIN、MAX。它们对于数据汇总至关重要(总计、平均值、计数),特别是与 GROUP BY 结合使用时。
聚合函数从一组行计算单一值——COUNT、SUM、AVG、MIN、MAX。它们对于数据汇总至关重要(总计、平均值、计数),特别是与 GROUP BY 结合使用时。
SELECT
COUNT(*) AS total_rows, -- count all rows
COUNT(email) AS rows_with_email, -- count NON-NULL emails (ignores NULLs!)
SUM(amount) AS total_amount, -- sum of a column
AVG(price) AS average_price, -- average
MIN(price) AS lowest, -- minimum
MAX(price) AS highest -- maximum
FROM orders;
每个函数将许多行简化为一个值。SUM/AVG 作用于数字;MIN/MAX 作用于数字、日期或文本;COUNT 作用于任何内容。
COUNT(*) -- counts ALL rows (including those with NULLs)
COUNT(email) -- counts only rows where email is NOT NULL
COUNT(DISTINCT country) -- counts UNIQUE non-null values
COUNT(*) 计算所有行,但 COUNT(column) 仅计算该列 不为 NULL 的行——一个微妙但重要的区别。COUNT(DISTINCT col) 计算唯一值。
-- aggregate PER GROUP instead of the whole table
SELECT country, COUNT(*) AS users, AVG(age) AS avg_age
FROM users
GROUP BY country; -- one result row per country
-- → for each country: how many users and their average age
在没有 GROUP BY 的情况下,聚合函数将整个结果汇总为一行。有了 GROUP BY,它为 每个组产生一行汇总——这是典型且强大的用法。
-- ❌ ERROR — can't mix an aggregate with a non-grouped column
SELECT name, COUNT(*) FROM users; -- which name? ambiguous
-- ✅ either group by it, or only select aggregates
SELECT country, COUNT(*) FROM users GROUP BY country;
聚合函数对于汇总和分析数据至关重要——计算总计、平均值、计数和极值是报告、分析、仪表板和应用程序逻辑中的持续需求,因此理解它们是基础 SQL 知识。
了解主要函数(COUNT、SUM、AVG、MIN、MAX)及其如何将多行简化为单个值对任何数据汇总都是必要的。
一个重要且经常被误解的细节是 COUNT(*) 与 COUNT(column) 的区别(COUNT(*) 计算所有行,COUNT(column) 仅计算非 NULL 值——这可能产生不同的、令人惊讶的结果),以及用于唯一值的 COUNT(DISTINCT)。
最强大的是,聚合函数与 GROUP BY 结合使用,生成按组的汇总(按类别的计数/平均值)——这是分析查询的基础。
理解陷阱,即不能混合聚合函数与非分组列(一个常见错误),也很重要。
由于数据汇总是无处不在的数据库任务(每个报告、仪表板和分析查询都使用聚合函数),并且由于理解这些函数、COUNT 的细微差别,尤其是它们与 GROUP BY 的结合是 SQL 中数据分析的基础,掌握聚合函数是核心的、频繁应用的知识,对于数据工作至关重要——在基本查询和分析、汇总能力之间架起桥梁,这些能力使 SQL 对报告和洞察变得有价值。