一、聚集函数SQL 5大预定义函数聚集函数以值集合为输入返回单个值常用于统计计算函数名功能说明COUNT([DISTINCT|ALL]*)统计元组个数*代表整行不会忽略 NULL 值COUNT([DISTINCT|ALL]列名)统计一列中值的个数会忽略该列的 NULL 值SUM([DISTINCT|ALL]列名)计算数值型列的总和列必须是数值类型忽略 NULLAVG([DISTINCT|ALL]列名)计算数值型列的平均值列必须是数值类型忽略 NULLMAX([DISTINCT|ALL]列名)求一列的最大值可用于字符/日期/数值类型MIN([DISTINCT|ALL]列名)求一列的最小值可用于字符/日期/数值类型 关键字DISTINCT表示去重后计算ALL默认表示包含所有值。二、ANY/ALL 谓词与等价转换ANY和ALL必须搭配比较运算符使用用于子查询结果的比较且用聚集函数实现通常效率更高谓词语义等价转换ANY大于子查询结果中的某个值MINALL大于子查询结果中的所有值MAXANY小于子查询结果中的某个值MAXALL小于子查询结果中的所有值MINANY大于等于子查询结果中的某个值MINALL大于等于子查询结果中的所有值MAXANY小于等于子查询结果中的某个值MAXALL小于等于子查询结果中的所有值MINANY不等于子查询结果中的某个值—ALL不等于子查询结果中的任何一个值NOT INANY等于子查询结果中的某个值INALL等于子查询结果中的所有值—三、示例解析例9.20需求查询课程 C1 的最高分、最低分及两者差值。SELECTMAX(G),MIN(G),MAX(G)-MIN(G)FROMScWHERECnoC1MAX(G)获取课程 C1 的最高成绩MIN(G)获取课程 C1 的最低成绩MAX(G)-MIN(G)计算高低分差距WHERE CnoC1限定只统计课程 C1 的数据✅ 核心要点聚集函数自动忽略 NULL 值COUNT(*)除外。ANY/ALL可等价替换为聚集函数性能更优。SUM/AVG仅支持数值型列MAX/MIN可支持字符、日期等类型。SQL 中聚集函数Aggregate Functions与ANY/ALL谓词的核心用法、语义等价关系及实际应用要点信息准确、结构清晰符合标准 SQL如 SQL-92 及后续规范语义。以下是对关键点的简明确认与补充说明✅聚集函数行为确认COUNT(*)统计行数含 NULL 行不忽略任何行COUNT(col)、SUM(col)、AVG(col)、MAX(col)、MIN(col)均自动跳过该列值为 NULL 的行AVG(col)等价于SUM(col)/COUNT(col)非SUM/COUNT(*)确保分母是有效非空值个数DISTINCT修饰列时如COUNT(DISTINCT Cno)先去重再计算适用于去重统计场景。✅ANY/ALL等价转换成立前提子查询必须返回单列、零行或多行结果不能多列若子查询返回空集ANY(空集)→FALSE无“某个值”可比较ALL(空集)→TRUE逻辑上“所有零个元素都满足”为真即空真 Vacuous Truth而MAX(空集)和MIN(空集)在标准 SQL 中返回NULL因此MAX(...)在空子查询下结果为UNKNOWN——此时等价性不严格成立需注意空集边界情况。实践中建议配合EXISTS或COALESCE处理。✅例9.20 正确性单表Sc选课表按CnoC1过滤后聚合语法与语义均正确若C1无记录则MAX(G)和MIN(G)均返回NULL差值也为NULL符合 SQL 三值逻辑。-- ✅ 推荐增强版处理无记录情况返回0差值SELECTCOALESCE(MAX(G),0)ASmax_score,COALESCE(MIN(G),0)ASmin_score,COALESCE(MAX(G)-MIN(G),0)ASgapFROMScWHERECnoC1;