数据库中常见的聚合函数

目录

聚合函数是什么

常见的聚合函数

SUM()

AVG()

MAX()

MIN()

COUNT()

GROUP_CONCAT() / STRING_AGG()

STDDEV() / STDDEV_SAMP()

VAR_POP() / VARIANCE()

聚合函数的作用

数据汇总:

统计分析:

数据分组:

聚合函数的好处

高效性:

简洁性:

灵活性:

可读性:

注意事项

NULL 值处理:

数据类型:

子查询中的聚合函数:

窗口函数:

性能考虑:

结果精度:

结合 GROUP BY 使用聚合函数

总结


聚合函数是什么

聚合函数 是一种特殊的 SQL 函数,用于对一组值执行计算,并返回单个值。这些函数通常用于汇总和分析数据,帮助用户从大量数据中提取有意义的信息

常见的聚合函数

常见的聚合函数有:SUM(),AVG(),MAX(),MIN(),COUNT(),GROUP_CONCAT() (MySQL),STDDEV(),STDDEV_SAMP(),VAR_POP(),VARIANCE()

SUM()

作用: 计算数值列的总和。

语法: SUM(column_name)

示例:

     SELECT SUM(salary) AS total_salary FROM employees; 
AVG()

作用: 计算数值列的平均值。

语法: AVG(column_name)

示例:

     SELECT AVG(age) AS average_age FROM employees;
MAX()

作用: 返回数值列中的最大值。

语法: MAX(column_name)

示例:

     SELECT MAX(price) AS max_price FROM products;
MIN()

作用: 返回数值列中的最小值。

语法: MIN(column_name)

示例:

     SELECT MIN(quantity) AS min_quantity FROM inventory;
COUNT()

作用: 计算某列中非空值的数量。

语法: COUNT(column_name) 或 COUNT(*)

示例:

     SELECT COUNT(employee_id) AS employee_count FROM employees;
     SELECT COUNT(*) AS total_records FROM orders;
GROUP_CONCAT() / STRING_AGG()

作用: 将多行数据合并成一个字符串。

MySQL: GROUP_CONCAT(column_name [SEPARATOR separator])

PostgreSQL: STRING_AGG(column_name, delimiter)

示例:

     -- MySQL
     SELECT department, GROUP_CONCAT(employee_name SEPARATOR ', ') AS employees
     FROM employees
     GROUP BY department;

     -- PostgreSQL
     SELECT department, STRING_AGG(employee_name, ', ') AS employees
     FROM employees
     GROUP BY department;
     
STDDEV() / STDDEV_SAMP()

作用: 计算标准差。

MySQL: STDDEV(column_name)

PostgreSQL: STDDEV(column_name)

示例:

     SELECT STDDEV(salary) AS salary_stddev FROM employees;
VAR_POP() / VARIANCE()

作用: 计算方差。

MySQL: VARIANCE(column_name)

PostgreSQL: VAR_POP(column_name)

示例:

     SELECT VARIANCE(salary) AS salary_variance FROM employees;
聚合函数的作用
数据汇总:

通过对一组数据进行求和、平均、最大值、最小值等操作,简化数据表示。

统计分析:

提供统计数据,如平均工资、最高价格、最低库存等,帮助进行业务分析和决策。

数据分组:

结合 GROUP BY 子句,可以对数据进行分组,并对每个组分别计算聚合值。

聚合函数的好处
高效性:

数据库引擎优化了聚合函数的性能,能够快速处理大规模数据。

简洁性:

使用聚合函数可以使 SQL 查询更加简洁明了,减少手动计算的需求。

灵活性:

可以根据不同的业务需求灵活地组合和嵌套聚合函数。

可读性:

清晰地表达了数据的计算意图,便于他人理解和维护。

注意事项
NULL 值处理:

大多数聚合函数会自动忽略 NULL 值,除非使用 COUNT(*) 来计数所有行。

示例:

     SELECT SUM(salary) AS total_salary FROM employees; -- 忽略 NULL 值
     SELECT COUNT(*) AS total_records FROM employees; -- 包括 NULL 值
数据类型:

确保聚合函数应用于适当的数据类型。例如,SUM() 和 AVG() 适用于数值类型。

示例:

     SELECT SUM(quantity) AS total_quantity FROM inventory; -- quantity 应为数值类型
子查询中的聚合函数:

聚合函数可以在子查询中使用,以获取更复杂的计算结果。

示例:

     SELECT department, MAX(avg_salary) AS highest_avg_salary
     FROM (
         SELECT department, AVG(salary) AS avg_salary
         FROM employees
         GROUP BY department
     ) AS dept_salaries
     GROUP BY department;
     
窗口函数:

窗口函数允许在不使用 GROUP BY 的情况下执行类似聚合的操作。

示例:

     SELECT 
         employee_id, 
         department, 
         salary, 
         AVG(salary) OVER (PARTITION BY department) AS avg_department_salary
     FROM employees;
性能考虑:

对于大数据集,聚合函数可能会消耗较多资源。可以通过索引和优化查询来提高性能。

示例:

     CREATE INDEX idx_employee_department ON employees(department);
结果精度:

特别是在计算平均值和标准差时,要注意结果的精度问题。可以使用更高精度的数据类型来避免误差。

示例:

     SELECT AVG(CAST(salary AS DECIMAL(10, 2))) AS average_salary FROM employees;
结合 GROUP BY 使用聚合函数

聚合函数通常与 GROUP BY 子句一起使用,以便对数据进行分组并计算每个组的聚合值。

示例:

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
总结

聚合函数是数据库查询中非常强大和有用的工具,可以帮助你快速汇总和分析数据。熟练掌握这些函数及其用法,将大大提高你的数据分析能力和效率。以下是一些关键点总结:

作用: 数据汇总、统计分析、数据分组。

好处: 高效性、简洁性、灵活性、可读性。

注意事项: NULL 值处理、数据类型、子查询、窗口函数、性能考虑、结果精度。

### MySQL 常见聚合函数及其使用方法 #### 1. 聚合函数概述 聚合函数MySQL 中用于对一组值进行计算并返回单个值。常见聚合函数包括 `COUNT`、`SUM`、`AVG`、`MAX`、`MIN` 和 `STDDEV_SAMP` 等[^2]。 #### 2. COUNT 函数 `COUNT` 用于统计满足条件的记录数,可以结合 `DISTINCT` 使用以统计唯一值的数量。 ```sql -- 统计 employees 表中所有记录的数量 SELECT COUNT(*) AS total_records FROM employees; -- 统计 employees 表中非 NULL 的 department_id 数量 SELECT COUNT(department_id) AS department_count FROM employees; ``` #### 3. SUM 函数 `SUM` 用于计算某一列数值的总和。 ```sql -- 计算 orders 表中所有订单金额的总和 SELECT SUM(amount) AS total_amount FROM orders;[^4] ``` #### 4. AVG 函数 `AVG` 用于计算某一列数值的平均值。 ```sql -- 计算 employees 表中所有员工的平均工资 SELECT AVG(salary) AS avg_salary FROM employees; -- 结合 GROUP BY 使用,按部门计算平均工资 SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id;[^1] ``` #### 5. MAX 和 MIN 函数 `MAX` 和 `MIN` 分别用于查找某一列的最大值和最小值。 ```sql -- 查找 employees 表中最高工资 SELECT MAX(salary) AS max_salary FROM employees; -- 查找 employees 表中最低工资 SELECT MIN(salary) AS min_salary FROM employees; ``` #### 6. STDDEV_SAMP 函数 `STDDEV_SAMP` 用于计算样本标准差。 ```sql -- 计算 x 列的样本标准差 SELECT STDDEV_SAMP(x) FROM (SELECT 4 x UNION SELECT 5 x UNION SELECT 6 x) t;[^2] ``` #### 7. HAVING 子句 `HAVING` 用于对聚合后的结果进行过滤,类似于 `WHERE`,但作用于聚合函数的结果。 ```sql -- 找出员工数量大于 10 的部门 SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id HAVING COUNT(*) > 10;[^3] ``` #### 注意事项 - 聚合函数不能直接在 `WHERE` 子句中使用,因为 `WHERE` 是对单条记录进行筛选,而聚合函数是对整个结果集进行计算。 - 如果需要对聚合结果进行进一步筛选,必须使用 `HAVING` 子句。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值