重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
给你举个例子:
在长阳等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都网站设计、外贸营销网站建设 网站设计制作定制制作,公司网站建设,企业网站建设,品牌网站制作,成都营销网站建设,外贸网站建设,长阳网站建设费用合理。
比如a表有这样几条数据
id name
1 5
2 4
3 5
4 3
那么你要查询名字不同的 语句应该是
select distinc(a.name) from a
那么查询到的结果应该是 name 5 4 3
但是实际情况并不仅仅是这么简单
比如我想查询name 不重复的所有数据
你就应该用到 group by 分组
select distinct(a.name),a.id from a group by a.name
distinct 必须放在开头 而且在查询多个字段的时候需要跟上 group by 这样才能得到你想要的结果
剔重有两种方法,一是distinct单个字段剔重,多个字段时一般需要加case when单独判断一次
二个就是最常用的分组剔重group by
多条件判断也有两种,一种是where and and。。用于全表多条件判断,
二种就是case when了,用于单个字段的多条件判断
具体场景应用你可以追问我回答你具体代码
你的意思是要当天最大的num ?
select id, time, max(num) from ta
where time = trunc(sysdate)
group by id, time
(1)查找有没有重复数据可以用去重统计(distanct+count)和本身的统计数据(count)对比,二者数据不同,那么就说明有重复数据。
(2)重复数据有哪些,可以用全体分组(group by+count)只要不等于1的就是就是重复数据
(3)在所有数据中显示重复数据。要用到开窗函数rank()over(group by 全体字段),这样可以给每条数据的前面都加上编号,也就是说只要前面的编号不是1,那么这条数据就是重复的。
1。用rowid方法
据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:
查数据:
select * from table1 a where rowid
!=(select max(rowid)
from table1 b where a.name1=b.name1 and
a.name2=b.name2......)
删数据:
delete from table1 a where rowid
!=(select max(rowid)
from table1 b where a.name1=b.name1 and
a.name2=b.name2......)
2.group by方法
查数据:
select count(num), max(name) from student --列出重复的记录数,并列出他的name属性
group by num
having count(num) 1 --按num分组后找出表中num列重复,即出现次数大于一次
删数据:
delete from student
group by num
having count(num) 1
这样的话就把所有重复的都删除了。
3.用distinct方法 -对于小的表比较有用
create table table_new as select distinct *
from table1 minux
truncate table table1;
insert into table1 select * from table_new;