在数据库管理系统中,聚合查询是一种强大的工具,它允许我们根据一组行计算出单个值,如总和、平均值、最大值、最小值或计数等。这些操作对于数据分析、报告生成以及理解数据分布至关重要。在本章“3-1 对表进行聚合查询”中,我们将深入探讨SQL中的聚合函数及其使用方法,了解如何通过聚合查询从表中提取有价值的信息。
SQL提供了几种内置的聚合函数,用于对一组值执行计算并返回一个结果。这些函数包括:
COUNT()
函数是最基本的聚合函数之一,用于计算表中的行数或者特定条件下的行数。它有两种常见用法:COUNT(*)
和COUNT(列名)
。
COUNT(*):计算包括NULL值在内的所有行数。
SELECT COUNT(*) FROM employees;
这条语句会返回employees
表中的总行数。
COUNT(列名):计算指定列中非NULL值的数量。
SELECT COUNT(email) FROM employees;
这条语句会返回employees
表中email
列非NULL值的数量。
SUM()
和AVG()
函数通常用于数值列,以计算总和或平均值。
SUM()示例:
SELECT department_id, SUM(salary) AS total_salary
FROM employees
GROUP BY department_id;
此查询按department_id
分组,并计算每个部门的总薪资。
AVG()示例:
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;
此查询同样按department_id
分组,但计算的是每个部门的平均薪资。
MAX()
和MIN()
函数用于找出列中的最大值和最小值,它们同样适用于数值列和非数值列(如字符串,但在非数值列中主要用于日期或文本排序)。
MAX()示例:
SELECT MAX(salary) AS highest_salary
FROM employees;
这条语句会返回employees
表中薪资最高的值。
MIN()示例:
SELECT MIN(hire_date) AS earliest_hire_date
FROM employees;
这条语句会返回employees
表中最早的入职日期。
在进行聚合查询时,GROUP BY
子句至关重要。它允许我们将结果集按照一个或多个列进行分组,以便对每个分组独立应用聚合函数。
单列分组:
SELECT department_id, COUNT(*) AS num_employees
FROM employees
GROUP BY department_id;
按department_id
分组并计算每个部门的员工数。
多列分组:
SELECT department_id, job_title, COUNT(*) AS num_employees
FROM employees
GROUP BY department_id, job_title;
同时按department_id
和job_title
分组,计算每个部门内每个职位的员工数。
虽然WHERE
子句用于过滤行,但HAVING
子句用于过滤分组后的结果集。它通常与GROUP BY
一起使用,以应用条件到聚合函数的结果上。
HAVING示例:
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 50000;
这条语句查找平均薪资超过50000的部门及其平均薪资。
SELECT
语句中使用GROUP BY
时,所有非聚合列都必须包含在GROUP BY
子句中。COUNT(列名)
会忽略NULL值,而COUNT(*)
会计算所有行。为了巩固所学知识,以下是一些实践练习题目,建议读者尝试解答:
通过这些练习,读者不仅能加深对聚合查询的理解,还能学会如何根据实际情况灵活运用SQL进行数据分析。
在数据库管理和数据分析领域,掌握聚合查询是不可或缺的技能。通过对本章内容的学习,读者应该能够熟练使用SQL中的聚合函数(如COUNT()
、SUM()
、AVG()
、MAX()
、MIN()
)以及GROUP BY
和HAVING
子句来执行复杂的聚合查询。这些技能将帮助读者从数据库中提取出有价值的信息,为数据驱动的决策提供有力支持。