sql中的聚合函数
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
中,否则会报错。