oracle分组查询

本小白日常oracle学习总结,若有错误望海涵,并希望大神能指点迷津
**

分组查询

//能够分组的表,表中的数据一定具有某些共性
//GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
分组分组, 什么是分组,就是根据分组字段,将分组字段中相同的数据合并为一组,这一组后面跟的一定是个聚合函数、

**
首先得了解一下常用的几个聚合函数,又叫基础统计函数
基础统计函数
count (*/列/distinct(列))统计表中的数据量

count(*),统计表中所有数据量
count(列),不统计null值
count(distinct(列)) 消除重复项后的个数

max(日期数字字段)最大
min (日期数字字段)最小
sum(数字字段)求和
avg(数字字段)平均数

分组语法
select 分组字段,统计函数 from 表名 where …group by 分组字段 having 统计函数<… order by 分组字段(ASC/DESC)
用分组可以可以进行多表分组查询:

select j.zhuyh 住院号,z.xingm 姓名,k.kesmc 原科室,k1.kesmc 现科室,sum(jine) 总费用,b.riqsj 日期
from jzd j,buslogs b,zyxx z ,ksxx k,ksxx k1
where j.zhuyh = b.zhuyh and b.zhuyh = z.zhuyh and b.yuanksbm = k.kesbm and b.xianksbm = k1.kesbm
group by j.zhuyh,z.xingm,k.kesmc,k1.kesmc,b.riqsj;

注意:

统计函数如果没有加group by 子句,select后面只能是统计函数,不能加其他字段
在有group by 子句的查询中,select 后面只允许出现分组字段和统计函数,其他字段不允许出现
在有group by 子句的查询中,统计函数允许嵌套,但嵌套后的查询,select后面只允许出现嵌套统计函数,不允许在出现其他列(分组字段也不行)但是group by 子句后面可以加分组字段
例:select max(avg()) from 表 group by 分组字段

重点理解:Having与Where的区别

  • where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚合函数(既基础统计函数),使用where条件过滤出特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,后面可以包含聚组函数,使用having条件过滤出特定的组,也可以使用多个分组标 准进行分组。
  • where发生在having之前,既筛选出来数据后在进行分组。

几个收藏语句,用来理解:
查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断:

select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)

删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING  COUNT(*) > 1);

查找表中多余的重复记录(多个字段)

select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值