mysql分组查询学生平均年龄_那些年我们一起做过的[分组查询]_MySQL

分组查询在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用聚合函数就必须出现在ORDER BY子句中(即SELECT后边的字段名要么出现在聚合函数中,要么在ORDER BY子句中使用)使用group by进行分组查询在使用group by关键字时,在select列表中可以指定的项目是...
摘要由CSDN通过智能技术生成

分组查询

在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用聚合函数就必须出现在ORDER BY子句中(即SELECT后边的字段名要么出现在聚合函数中,要么在ORDER BY子句中使用)

使用group by进行分组查询

在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:

*被分组的列

*为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数

注意:group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面

HAVING子句与WHERE子句的区别

HAVING子句和WHERE子句的相似之处在于,它也定义搜索条件。但与WHERE子句不同,HAVING子句与组有关,而不是与单个的行有关。

1、如果指定了GROUP BY子句,那么HAVING子句定义的搜索条件将作用于这个GROUP BY子句创建的那些组。

2、如果指定WHERE子句,而没有指定GROUP BY子句,那么HAVING子句定义的搜索条件将作用于WHERE子句的输出,并把这个输出看作是一个组。

3、如果既没有指定GROUP BY子句也没有指定WHERE子句,那么HAVING子句定义的搜索条件将作用于FROM子句的输出,并把这个输出看作是一个组。

4、在SELECT语句中,WHERE和HAVING子句的执行顺序不同。上面SELECT语句的执行步骤可知,WHERE子句只能接收来自FROM子句的输入,而HAVING子句则可以接收来自GROUP BY子句、WHERE子句和FROM子句的输入。

S-TQL语句执行顺序

select 5:投影 ,映射为对应的列

from 1:定位到表

where 2:进行分组前的第一次筛选

group by 3:分组

having 4:对分组后的数据进行第二次筛选

order by 6:对映射出的结果进行排序

注意:where后面不能加聚合函数

三个顺序:

01where:对表中记录进行筛选(分组前)

02group by 分组依据

03having 对分组后的数据进行筛选

见到having,之前必须有group by,因为having是对分组后的数据进行筛选

三者使用顺序不可颠倒

eg:

myschool数据库中有四张表,分别为student(学生表)result(成绩表)subject(科目表)grade(年级表)

01查询每个年级的总学时数,并按照升序排列

题目是每个年级的总学时数,每个年级肯定做为group by的分组依据,总学时则利用sum()函数

至于order by后也可以跟SUM(classhour).写总学时数的目的是为了更详细的理解语句的执行顺序

select gradeid as 年级编号,SUM(classhour) as 总学时数

from Subject

group by GradeId

order by 总学时数

02查询每个参加考试的学员的平均分

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值