分组函数

作者: baobaodz | 来源:发表于2018-03-24 22:31 被阅读46次

在SQL中常使用的组函数有以下几个:
1、COUNT(): 求出全部的记录数
2、MAX():求出一组中最大的值
3、MIN():求出最小值
4、AVG():求出平均值
5、SUM():求和
例如

SELECT MAX(DEGREE),MIN(DEGREE),
AVG(DEGREE),SUM(DEGREE),COUNT(*) FROM SCORE;
--从成绩表中查询最高成绩,最低成绩,平均成绩,总成绩和成绩行树

要使用分组统计,则首先应该固定其语法,使用GROUP BY 进行分组,此时的SQL语句格式如下:

SELECT(DISTINCT)*|查询列1 别名1,查询列2 别名2...
FROM 表名称1 别名1,表名称2 别名2
(WHERE 条件)
(GROUP BY 分组条件)
(ORDER BY 排序字段 ASC|DESC,排序字段 ASC|DESC)

例如
求每门课程的平均成绩

--因为有好几门课程,所以涉及到分组
SELECT CNO,AVG(DEGREE) FROM SCORE
GROUP BY CNO;
image.png

注意:
GROUP BY句中的列要与SELECT中一一对应,不然就报错。比如

SELECT CNO,SNO,AVG(DEGREE) 
FROM SCORE
GROUP BY CNO;

因为SELECT中的SNO学生号再GROUP BY中没有对应所以就会出错如下


出错

• 通过使用WHERE子句,可以在将行分成多个组之前先排除某些行。
• 必须将列包括在GROUP BY子句中。
• 不能在GROUP BY子句中使用列别名。
另外,在where子句中不能出现分组函数

SELECT CNO,AVG(DEGREE) 
FROM SCORE
WHERE AVG(DEGREE) > 85 --报错显示此处不允许使用分组函数
GROUP BY CNO;

但是如果需求是查询每门课程平均成绩高于85分的成绩表,该怎么实现呢?这时候就需要HAVING过滤查询

  SELECT CNO,AVG(DEGREE) 
  FROM SCORE
  GROUP BY CNO
  HAVING AVG(DEGREE)>85;

使用HAVING子句时,Oracle将按以下方式对组进行限定:

  1. 对行进行分组。
  2. 应用组函数。
  3. 显示符合HAVING子句的组。

相关文章

  • SQL总结-开窗函数

    一 . 开窗函数 分组函数 开窗函数 分组与开窗的区别分组函数每组只返回一行,而开窗函数每组返回多行。如下: 分组...

  • MySQL——分组函数、distinct、分组查询、连接查询、子

    MySQL——分组函数、distinct、分组查询、连接查询、子查询 一、分组函数(聚合函数)1、 会自动忽略空值...

  • 1-(2)、MySql——基础部分

    一、MySQL之函数(单行函数、分组函数) 1、概述 调用语法:select函数名(实参列表);分组函数和单行函数...

  • MySQL查询语法

    1 分组函数和单行函数 分组函数和单行函数的区别:单行函数:将一个数据进行处理,返回一个值分组函数:将虚拟表看做一...

  • Mysql笔记之分组函数和分组查询

    1、分组函数 2、分组查询 3、分组查询案例

  • Python:groupby函数及分组后使用自定义函数计算分组后

    groupby函数分组原理:(1)不论分组键是数组、列表、字典、series、函数,只要待分组变量与分组键值的长度...

  • 分组函数

    在SQL中常使用的组函数有以下几个:1、COUNT(): 求出全部的记录数2、MAX():求出一组中最大的值3、M...

  • 分组函数

  • 分组函数

    max()、min()、sum()、avg()、count() ()里加入的是列名 分组函数默认不计null值nu...

  • 分组函数

    一、分组函数概述 分组函数是对表中一组记录进行操作,每组只返回一个结果,即首先要对表记录进行分组,然后在进行操作汇...

网友评论

    本文标题:分组函数

    本文链接:https://www.haomeiwen.com/subject/rhqccftx.html