Oracle查询之分组函数

分组函数用于将表中数据分成若干个小组,再对小组中的数据执行组函数
默认情况下一张表的数据就是一个组
Oracle中常见的组函数有 avg,count,max,min,sum
avg:求平均值
例如:select avg(age) from test
结果:查询出test表中的平均年龄

count:求查询到的记录总数
例如:select count(*) from test
结果:查询出test表中记录总数
例如:select count(某个字段名)from test
结果:查询出字段不为空的记录总数
例如:select count(distinct 字段) from test
结果:查询出非空并且不重复的某字段的总数

max:求出某个组中最大值
例如:select max(age) from test
结果:查询出表中最大年龄

min:求出某个组中最小值
例如:select min(age) from test
结果:查询出表中最小年龄

sum:求出某个组中某个字段的总和
例如:select sum(age) from test
结果:查询出表中年龄总和

分组函数的语法:
SELECT [column,] group_function(column), ... 
FROM table 
[WHERE condition]
[GROUP BY column]
[HAVING group_condition]
[ORDER BY column];

执行顺序从前至后:
FROM ,WHERE,GROUP BY,HAVING,SELECT,ORDER BY

WHERE和HAVING的区别:
WHERE和HAVING都能作为条件帅选
    WHERE比HAVING先执行
    WHERE出现在FROM后面,而HAVING出现在GROUP BY后面
    HAVING后面可以出现组函数,而WHERE后面不能出现(看执行顺序就知道,WHERE执行时还没有分组)

GROUP BY和HAVING的区别
GROUP BY可以单独存在,它的后面可以不出现HAVING子句 但是HAVING子句要想出现就必须跟在GROUP BY后面

分组的具体实例(假设test表中有id,salary等字段)
SELECT sum(salary) 
FROM test
WHERE id>2
GROUP BY id
HAVING sum(salary) >10000
ORDER BY id ASC
结果:查询出test表中id大于2并且总工资大于10000的每组的总工资,并且按照id升序显示
分析(按照执行过程):
首先进入test这个表,执行条件语句where,筛选出id大于2的所有行
然后找出id大于2的所有行
根据id分成很多组
筛选出总工资大于10000的组
根据id降序展示结果
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值