SQL中的聚合函数用于对表中的数据进行汇总计算,常用来生成统计信息,例如总和、平均值、最大值、最小值等。它们通常与GROUP BY子句一起使用,以对数据分组后再计算聚合结果。
以下是SQL中常用的聚合函数及其详细讲解:
1. COUNT( )
功能: 统计记录的数量。
-
语法:
sql
SELECT COUNT(column_name) FROM table_name; -
应用场景:
COUNT(*):统计所有行的数量(包括NULL值)。COUNT(column_name):统计指定列中非NULL值的数量。
-
示例:
sql
SELECT COUNT(*) AS total_rows FROM employees;返回
employees表中的总行数。sql
SELECT COUNT(department_id) AS valid_departments FROM employees;返回
department_id列中非NULL值的数量。
2. SUM( )
功能: 计算数值列的总和。
-
语法:
sql
SELECT SUM(column_name) FROM table_name; -
注意事项:
- 只能对数值列使用。
- 如果列中全是
NULL,结果为NULL。
-
示例:
sql
SELECT SUM(salary) AS total_salary FROM employees;返回
employees表中salary列的总和。sql
SELECT department_id, SUM(salary) AS department_salary FROM employees GROUP BY department_id;按部门汇总工资。
3. AVG( )
功能: 计算数值列的平均值。
-
语法:
sql
SELECT AVG(column_name) FROM table_name; -
注意事项:
- 与
SUM类似,仅适用于数值列。 - 自动忽略
NULL值。
- 与
-
示例:
sql
SELECT AVG(salary) AS average_salary FROM employees;返回员工的平均工资。
sql
SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id;按部门计算平均工资。
4. MAX( )
功能: 获取列中的最大值。
-
语法:
sql
SELECT MAX(column_name) FROM table_name; -
注意事项:
- 适用于数值、日期和字符串列。
- 忽略
NULL值。
-
示例:
sql
SELECT MAX(salary) AS highest_salary FROM employees;返回最高工资。
sql
SELECT MAX(hire_date) AS latest_hire_date FROM employees;返回最新的入职日期。
5. MIN( )
功能: 获取列中的最小值。
-
语法:
sql
SELECT MIN(column_name) FROM table_name; -
注意事项:
- 和
MAX类似,适用于数值、日期和字符串列。 - 忽略
NULL值。
- 和
-
示例:
sql
SELECT MIN(salary) AS lowest_salary FROM employees;返回最低工资。
sql
SELECT MIN(hire_date) AS earliest_hire_date FROM employees;返回最早的入职日期。
6. GROUP BY 和 聚合函数配合使用
聚合函数常与GROUP BY结合,按分组计算聚合值。
- 示例:
sql
SELECT department_id, SUM(salary) AS total_salary FROM employees GROUP BY department_id;按部门汇总工资。
7. HAVING 子句
当使用聚合函数筛选分组结果时,需要使用HAVING,而不是WHERE。
- 示例:
sql
SELECT department_id, SUM(salary) AS total_salary FROM employees GROUP BY department_id HAVING SUM(salary) > 50000;SELECT department_id, SUM(salary) AS total_salary FROM employees GROUP BY department_id HAVING SUM(salary) > 50000;筛选出工资总和超过50000的部门。
8. 注意事项:
- 聚合函数忽略
NULL值(除了COUNT(*))。 - 如果在
SELECT中使用普通列,必须同时出现在GROUP BY中,否则会报错。