函数的理解 group by order by理解

简介: 函数的分类 单行函数 对每一行记录都有作用 对每一行记录都能返回一个结果 例子lower(ename) 对每一个记录的ename字段都返回一个结果多行函数 对一组记录返回一个结果 聚合函数就是多行函数 例子l...

函数的分类
单行函数 对每一行记录都有作用 对每一行记录都能返回一个结果
例子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要放在最后

这里写图片描述

目录
相关文章
|
9月前
|
开发框架 .NET 编译器
C#-Group By 的使用
group by 是linq中的分组功能,能通过给定的字段对数据集进行分组,得到分组后的结果。
178 0
|
8月前
|
SQL 关系型数据库 MySQL
mysql使用ORDER BY和GROUP BY
mysql使用ORDER BY和GROUP BY
43 0
|
SQL 关系型数据库 MySQL
GROUP BY和ORDER BY的区别
GROUP BY和ORDER BY的区别
249 0
|
SQL 关系型数据库 MySQL
only_full_group_by问题而引发的对group by的深入思考
only_full_group_by问题而引发的对group by的深入思考
115 0
|
SQL
ORDER BY && GROUP BY
ORDER BY && GROUP BY
73 0
ORDER BY && GROUP BY
group by+group_concat解决的小问题
group by+group_concat解决的小问题
85 0
group by
group by
73 0
|
SQL 关系型数据库 数据挖掘
你真的懂使用Group by?
你真的懂使用Group by?
492 0
你真的懂使用Group by?
|
SQL 关系型数据库 MySQL
order by使用
order by使用
139 0
order by使用
|
SQL
十、GROUP BY 和 HAVING 的使用
十、GROUP BY 和 HAVING 的使用
257 0

热门文章

最新文章