news 2026/6/12 0:47:00

sql聚合函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sql聚合函数

在 SQL 中,聚合函数(Aggregate Function)是对一组数据行(记录)进行计算并返回单一结果的函数,核心作用是实现数据的统计、汇总分析。它通常与GROUP BY子句配合使用(分组聚合),也可单独用于全表统计,常见于报表、数据分析场景。

一、常用聚合函数(附示例)

以下以经典的score成绩表为例(字段:student_id 学生 ID、subject 科目、score 分数):

函数作用示例(SQL)示例结果
COUNT()统计行数(非 NULL 值的数量)-- 统计总学生数(去重)COUNT(DISTINCT student_id)50(假设 50 个学生)
SUM()计算数值列的总和-- 统计数学科目总分SUM (score) WHERE subject=' 数学'4500(假设)
AVG()计算数值列的平均值-- 计算数学科目平均分AVG (score) WHERE subject=' 数学'90(假设)
MAX()找出列中的最大值-- 数学科目最高分MAX (score) WHERE subject=' 数学'100
MIN()找出列中的最小值-- 数学科目最低分MIN (score) WHERE subject=' 数学'60
GROUP_CONCAT()(MySQL 特有)分组拼接字符串-- 拼接每个学生的科目GROUP_CONCAT(subject) GROUP BY student_id语文,数学,英语
关键说明:
  1. COUNT()的三种用法:
    • COUNT(*):统计所有行数(包括 NULL 值);
    • COUNT(列名):统计该列非 NULL 值的行数;
    • COUNT(DISTINCT 列名):统计该列去重后的非 NULL 值行数。
  2. 聚合函数会自动忽略NULL值(比如某学生某科目分数为 NULL,SUM/AVG不会计算该值)。

二、聚合函数的核心使用规则

1. 单独使用(全表聚合)

无需分组,直接对整张表的目标列统计:

-- 统计成绩表总记录数 SELECT COUNT(*) AS total_records FROM score; -- 统计所有科目总分、平均分、最高分、最低分 SELECT SUM(score) AS total_score, AVG(score) AS avg_score, MAX(score) AS max_score, MIN(score) AS min_score FROM score;
2. 与 GROUP BY 配合(分组聚合)

按指定字段分组,对每组数据分别聚合(最常用场景):

-- 按科目分组,统计每科的总分、平均分、参考人数 SELECT subject, SUM(score) AS total_score, AVG(score) AS avg_score, COUNT(student_id) AS student_count FROM score GROUP BY subject; -- 分组字段必须出现在SELECT中(除聚合列外)
3. 与 HAVING 配合(分组后过滤)

WHERE过滤分组前的行,HAVING过滤分组后的聚合结果(不能用 WHERE 过滤聚合函数结果):

-- 找出平均分≥80的科目 SELECT subject, AVG(score) AS avg_score FROM score GROUP BY subject HAVING avg_score >= 80; -- 过滤分组后的聚合结果
4. 禁止与非聚合 / 非分组字段混用

SELECT 子句中,若包含聚合函数,其他字段必须是GROUP BY的分组字段,否则会报错(不同数据库严格度不同,如 MySQL 非严格模式可能返回随机值,需避免):

-- 错误示例:subject不是分组字段,也不是聚合函数 SELECT subject, AVG(score) FROM score; -- 正确示例:subject是分组字段 SELECT subject, AVG(score) FROM score GROUP BY subject;

三、常见注意事项

  1. 性能问题:聚合函数需遍历数据行,数据量极大时(百万 / 千万级),需给分组字段、过滤字段加索引优化;
  2. NULL 值处理:若需将 NULL 值计入计算(比如 NULL 视为 0),需用IFNULL()COALESCE()转换:
    -- 把NULL分数视为0,计算平均分 SELECT AVG(IFNULL(score, 0)) FROM score;
  3. 嵌套聚合:支持聚合函数嵌套(需用子查询),比如 “统计各科目平均分的最大值”:
    SELECT MAX(avg_score) FROM (SELECT AVG(score) AS avg_score FROM score GROUP BY subject) AS sub;

四、扩展:其他数据库特有聚合函数

  • PostgreSQLSTRING_AGG(列名, 分隔符)(类似 MySQL 的 GROUP_CONCAT)、PERCENTILE_CONT()(分位数计算);
  • SQL ServerSTRING_AGG(列名, 分隔符)COUNT_BIG()(统计大数行数,返回 bigint 类型);
  • OracleLISTAGG(列名, 分隔符) WITHIN GROUP (ORDER BY 列名)(分组拼接)、AVG()支持空值处理。

核心总结:聚合函数是 SQL 数据统计的核心工具,核心逻辑是 “对一组数据做汇总计算”,搭配GROUP BY/HAVING可实现精细化的分组统计,是数据分析、报表生成的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 4:48:40

Open-AutoGLM报错代码查询宝典:3年累计验证的12种典型场景还原

第一章:Open-AutoGLM 报错代码查询在使用 Open-AutoGLM 框架进行自动化任务时,开发者常会遇到各类运行时错误。准确识别并解析报错代码是提升调试效率的关键环节。该框架通过标准化的错误码机制反馈问题来源,便于快速定位故障点。常见错误类型…

作者头像 李华
网站建设 2026/6/11 2:54:03

Linly-Talker与LangChain整合:增强大模型记忆与决策能力

Linly-Talker与LangChain整合:增强大模型记忆与决策能力 在虚拟主播深夜直播带货、数字客服24小时响应咨询的今天,用户早已不再满足于“能说话的动画”。他们期待的是一个记得住对话历史、查得出实时信息、能自主做判断的“类人”存在。这背后的核心挑战…

作者头像 李华
网站建设 2026/6/10 8:20:36

python导入基础概念解析及使用说明

python导入基础概念解析及使用说明 本文系统介绍了Python中导入模块的核心概念,包括目录/文件结构(模块、包、库、项目)、路径类型(绝对/相对)及实际应用场景。重点分析了绝对导入(推荐方式,基…

作者头像 李华
网站建设 2026/6/9 21:16:51

Open-AutoGLM批量任务处理全攻略(企业级自动化落地秘籍)

第一章:Open-AutoGLM批量任务处理的核心价值在大规模自然语言处理场景中,自动化与高效性是系统设计的关键。Open-AutoGLM 作为一款面向 GLM 系列模型的批量任务调度框架,其核心价值体现在对异构任务的统一管理、资源的智能分配以及执行流程的…

作者头像 李华
网站建设 2026/6/11 10:33:07

揭秘Open-AutoGLM批量任务卡顿难题:3步实现性能翻倍提升

第一章:揭秘Open-AutoGLM批量任务卡顿难题:3步实现性能翻倍提升在高并发场景下,Open-AutoGLM 处理批量任务时常出现响应延迟、资源争用等问题,严重影响推理吞吐量。通过系统性优化策略,可显著缓解卡顿现象,…

作者头像 李华
网站建设 2026/6/11 5:04:53

揭秘Open-AutoGLM定时任务配置难点:3步实现零误差任务调度

第一章:Open-AutoGLM定时任务配置概述Open-AutoGLM 是一个面向自动化大语言模型任务调度的开源框架,支持灵活的定时任务配置,适用于模型推理、数据预处理与结果推送等场景。通过集成标准的调度引擎与模块化任务接口,用户可高效管理…

作者头像 李华