sql 怎么查询不重复数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 怎么查询不重复数据相关的知识,希望对你有一定的参考价值。

1、select distinct 查询字段名 。

2、查询from 表名 。


3、设置where 查询条件。 

4、输入distinct是去除重复内容的。

其他解决办法:

1、先把不重复数据的id查询出来 通过count()计算 只有数目为1的才是不重复的数据。

2、然后通过in选择出不重复记录的数据。


例子:   


统计出a表中name不重复的所有记录


select b.* from table b where b.id in(select a.id from table a group by a.name having 

count(a.id) <2)


//其中 name重复的数据的列名。

参考技术A 折腾了大半天,搞定。
方法:
select max(字段1) as 字段1,字段2,max(字段3) as 字段3,max(字段4) as 字段4 from 表1 group by 字段2
这样能以 字段2 为关键字,筛选所有不重复记录。
我的表有200多个字段,就这么搞定了。
结果相当于 excel 以单个字段为关键字去重复。
参考技术B select distinct 查询字段名
from 表名
where 查询条件

其中distinct是去除重复内容的本回答被提问者和网友采纳
参考技术C 查询的时候多查一个sum
用group by来分组
最后去掉sum列就行了
参考技术D select distinct 字段名
from 表名

sql 有重复字段的多个表查询时,数据被覆盖怎么解决?

select a.no
,sum(case when a.index = 1 then a.value else 0 end)/count(distinct a.calcdate) as aa
,sum(case when c.index = 5 then c.value else 0 end)/count(distinct c.calcdate) as cc
from A a join C c on a.bid = c.bid
group by a.no

表A和表C字段相同,都有no,index,value,calcdate,现在运行后c的值会覆盖a的值运算
求不会覆盖的方法

参考技术A select a.no
,sum(case when a.index = 1 then a.value else 0 end)/count(distinct a.calcdate) as aa
from A
group by a.no
union all
select c.no
,sum(case when c.index = 5 then c.value else 0 end)/count(distinct c.calcdate) as cc
from C
group by C.no追问

运行后没有cc那列,只有no和aa

追答

select no
,sum(case when index = 1 then value else 0 end)/count(distinct calcdate) as aa
from A
group by no
union all
select no
,sum(case when index = 5 then value else 0 end)/count(distinct calcdate) as aa
from C
group by no
这样看下数据对不对,上下查询的结果都放同一个字段里面

追问

不行的

追答

我后面这个代码运行完是怎么样的,截图看下

以上是关于sql 怎么查询不重复数据的主要内容,如果未能解决你的问题,请参考以下文章

用sql语句进行多表连接查询,怎么不查出重复数据

如何在数据库中查询出重复记录

sql 2005 语句 身份号码不重复

SQL重复数据只显示一条,查询语句怎么写

sql 查询不重复记录

sql语句 分次(多次)获取不重复记录,请高手赐教!