SQL中如何使用聚合函数_SQL聚合函数的用法详解

sql中的聚合函数有哪些

sql中常见的聚合函数

说实话,SQL聚合函数还是蛮重要的。
使用的人越多,数据统计就越容易。
当我第一次学习它时,函数名称看起来都一样,当时我没有意识到。
我们分几类来谈谈:
1 .基本的 1 . 计数()
功能:统计行数。
只需计算整行即可。
如果您键入列名,请忽略 NULL 值。

示例:例如,要检查员工表中的总人数,请键入 SELECT COUNT() FROM 员工。
如果要检查特定部门的人数,请输入 SELECT COUNT(department_id) FROM员工。

2 求和()
功能:添加。
仅对数字列有用,NULL 值不包含在计算中。

示例:要计算所有员工的总工资,请输入 SELECT SUM(salary) FROM员工。

3 .AVG()
功能:计算平均值。
这只适用于数字列,空值不计算在内。

示例:要检查平均工资,请输入 SELECT AVG(salary) FROMEmployees。

4 最小值() / 最大值()
功能:求最小值/最大值。
数字、字符串和日期都可以。

示例:要检查最早入职日期和最高工资,请输入 SELECT MIN(hire_date), MAX(salary) FROMEmployees。

2 高级的 1 . GROUP_CONCAT()(仅适用于MySQL)
功能:将多行文本放在一行上,用分隔符分隔。

示例:按部门分组,部门内所有员工姓名用逗号分隔,只需输入 SELECT Department_id, GROUP_CONCAT(SEPARATOR name ',') FROMEmployees GROUP BY Department_id 即可。

2 STDDEV() / 方差()
功能:计算标准差和方差。
看看数据有多广泛。

示例:要检查工资的标准差和方差,请输入 SELECT STDDEV(salary), VARIANCE(salary) FROMEmployees。

3 如何使用 1 .与GROUP BY一起使用
功能:按类别计算统计值。
例如,计算按部门的平均工资。

示例:从员工组中按部门 ID 选择部门 ID、平均工资(薪水)。

2 与 HAVING 一起使用
功能:过滤分组结果。
比如只看平均工资5 000以上的部门。

示例:SELECT Department_id, AVG(salary) FROMEmployee GROUP BY Department_id HAVING AVG(salary) > 5 000。

四.注意事项 1 . NULL值处理:除COUNT()外,其他函数都将NULL视为不可见。
2 .性能优化:如果对大表使用聚合函数,最好建立多个索引以运行得更快。
3 、数据库差异:GROUP_CONCAT来自MySQL,其他数据库写法不同。
例如,PostgreSQL 使用 STRING_AGG,SQL Server 使用 STRING_AGG,Oracle 使用 LISTAGG。

就是这样。
说实话,刚开始学习的时候很容易感到困惑,尤其是having和WHERE是不同的。
HAVING 在分组后使用。
慢慢使用你就会习惯的。

什么是SQL的聚合函数?COUNT、SUM等函数的详解

哇,这个 SQL 聚合函数的描述相当完整。
我们来一一了解一下。

COUNT 主要是对行进行计数。
例如,如果您想知道表中有多少条记录,请使用 COUNT(),它将计算任何值,甚至零值。
如果只想统计特定列的非空值,例如统计有多少人填写了年龄,请使用 COUNT(column_name)。
如果您仍想进行迭代,例如计算有多少个不同的年龄,请使用 COUNT(DISTINCT column_name)。
这个功能非常方便,特别是在检查用户增长或数据完整性时。

SUM 是加法。
将所有值添加到一列中。
注意SUM自动忽略NULL值,NULL值不计算在内。
如果该列为 NULL,则结果为 NULL。
例如,计算一个班级每个人的总分,就是SUM(score)。
此函数对于计算销售额或总分特别有用。

AVG,平均。
计算一列值的平均值。
NULL 值也会被自动忽略。
例如,如果您想知道平均分数,请使用 AVG(score)。
这也被广泛使用,例如评估产品评级或用户评级。

MIN和MAX,分别求最小值和最大值。
无论您有数字列、日期列还是字符串列,都可以使用它。
例如,要检查最低分数和最高分数,请一起使用 MIN(score) 和 MAX(score)。
这两个对于查找极值场景非常有用,例如库存的最低点和最高点。

GROUP_CONCAT,这是MySQL特有的。
主要是连接组内的字符串,默认用逗号分隔。
如果您想列出一组中每个人的姓名并将它们组合成一个句子,请使用此选项。
您还可以自定义分隔符,例如逗号或空格。
例如,要按班级分组并列出每个班级中每个人的姓名,请使用 GROUP_CONCAT(name SEPARATOR ', ')。

与 GROUP BY 一起使用,这个组合简直是无与伦比的。
如果你想按特定的状态进行分组,然后对每个组进行统计,则必须将它们一起使用。
例如,要按年龄分组并计算每个年龄的平均分数,请选择年龄,AVG(分数)FROM学生GROUP BY年龄。
这样您就可以看到各个年龄段的分数分布情况。

实际使用时应注意以下几点:
NULL 值处理:默认情况下,SUM 和 AVG 将 NULL 视为空气,不计算在内。
如果想将NULL算作默认值,比如计算总分时将空白分数算为0,可以使用COALESCE(score, 0)将NULL改为0再计算。
数据类型必须正确:不能对字符串使用 SUM。
比如SUM(name)肯定不行,会报错。
您必须使用数值或可比较的类型。
性能优化:数据量过多,计算会变慢。
可以添加索引,特别是在 GROUP BY 或 WHERE 中使用的列。
还可以对大表进行分区,例如按月分区,并且在计算时仅扫描当前分区。
或者使用物化视图提前计算并存储,需要时直接查看结果。
复杂比率:想要根据比率进行计算?比如统计过的人可以用CASE。
例如,COUNT(CASE WHEN Score >= 6 0 THEN 1 ELSE NULL END) 将仅计算及格成绩。

扩展分数:
多列分组:例如,如果要按班级和年龄组计算平均分数,只需 GROUP BY class_id、age 即可。
HAVE过滤:GROUP BY之后计算后,如果要过滤哪些组,请使用HAVING。
例如,如果您只查看平均分数高于 8 0 的课程,则您的 avg_score > 8 0。
组合多个聚合函数:在一次搜索中使用多个聚合函数。
例如,如果您想要班级的总分、平均分、最高分和最低分,请输入 SUM(score)、AVG(score)、MAX(score) 和 MIN(score)。

一般来说,SQL聚合函数是数据处理的基本工具。
如果好好利用这些函数,结合GROUP BY、CASE等,可以做很多工作。
使用时只需注意数据类型、NULL值等小细节,并考虑性能即可。