函数的理解 group by order by理解

函数的分类
单行函数 对每一行记录都有作用 对每一行记录都能返回一个结果
例子lower(ename) 对每一个记录的ename字段都返回一个结果

多行函数
对一组记录返回一个结果
聚合函数就是多行函数
例子lower(ename)
select max(sal)from emp

常用的聚合函数
avg 取平均值
sum 取所有值之和
count(ename) 值的个数 不包含 ename=null的值
count(distinct ename)统计不重复的值
count(*)选中的行数
max() 最高值 适用于数值型 字符型和日期型的列
min()最低值

用聚合函数作用于某一字段时,会忽略所有的null行

group by 用于对查询的结果分组统计
要想把一个表中的记录分成若干组,就需要用group by
select name,sum(age) from student group by name 就是根据名字来分组的

重要的注意点::

select name,age from student group by name会报错 因为一个名字可能对应多个人 意思就是说会有多个age 这个时候 一个名字对应一行数据
但是age也只能对应一行 可实际上age可以有多个就有问题了 除非age放在聚合函数

having语句的使用
having子句不能出现字段的别名,只能使用字段最原始的名字,where和havingi样都不允许出现字段别名,只允许出现原始的字段名字
having是用来对分组后的数据进行进一步的过滤 所以使用having时通常先用group by 进行分组
比如 select deptno from emp group by deptno having deptno>10
having 里面的数据必须时select排序中有的 排序中没有的 应该放在where放在前面条件中就筛洗了

总结 having子句出现的字段必须是分组后整个组的总体信息
select deptno, avg(sal) as “平均工资”
from emp
group by deptno
having count(*) > 3 这种情况下 count没有出现在select却也可以出现在having 后面

select deptno, avg(sal) as “平均工资”
from emp
group by deptno
having ename like ‘%A%’这种就不可以 因为ename没有出现在select中

order by
select *from emp order by deptno 按照deptno升序排序
select *from emp order by deptno desc按照deptno降序排序
select *from emp order by deptno,sal desc 按照deptno升序排序,如果deptno相等 就按照 sal降序排序

不允许再where 子句中使用分组函数实例
比如:
select deptno, avg(sal) “平均工资”, count(*) “部门人数”, sum(sal) “部门工资总和”
from emp
where avg(sal) > 2000 –error 因为where是对原始的数据过滤 不能使用聚合函数 因为还没有分组
group by deptno
having sum(sal) > 5000 就是会报错的,因为where有聚合函数

select语句的基本结构
select select_list
from table_list
join 如果有聚合函数 需要对聚合函数取别名
on
where 不能跟聚合函数
group by
having 后面不能跟别名
order by
where 子句是用来筛选由from子句指定的表的行
group by 是用来将where子句输出的行分组
select中只能写group by里面的列或者是表的整体信息,比如count avg之类的函数 前提是有group by
having 是用来筛选分组汇总的行
order by是用来控制最后显示的效果
在内连接里面 where要放在最后

这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值