
1、创建测试表,
create table test_dis(id number, name varchar2(20), value number(10))
2、插入测试数据
insert into test_dis values(1,'a',123)
insert into test_dis values(2,'b',152)
insert into test_dis values(3,'c',123)
insert into test_dis values(4,'d',520)
insert into test_dis values(5,'e',300)
commit
3、查询表中全量数据,select t.*, rowid from test_dis t
4、编写sql,查询表中某一字段不重复的所有数据,可以发现只有id为2,4,5的记录查询出。
select * from test_dis t where value in (select value from test_dis group by value having count(*)=1)
sql 查询不重复的记录 可以使用 having count group by 组合先把不重复数据的id查询出来 通过count()计算 只有数目为1的才是不重复的数据
然后通过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重复的数据的列名
需求说明
1、我需要查询某列不重复的数据
2、并且显示不重复数据的所有项
sql语句如下
select * from data group by address
如果是仅仅查询某列不重复数据,只需要一列
效果如下
sql语句
select DISTINCT address from data
这里有一个非常非常需要注意的地方:
SELECT DISTINCT [字段名]后面不能再跟其他的字段,否则检索出来的记录仍然会含有重复项;
错误写法:
SELECT DISTINCT [字段名] ,[其他字段名] FROM [表名] WHERE [检索条件字句]
如果我们的记录集里还需要有其他字段值 ,那怎么办呢?
实际上,我们完全可以用另一种办法来解决问题只是需要用到子查询而已!
使用GROUP BY 分组
有一点需要注意:
使用带有GROUP BY字句的查询语句时,在SELECT列表指定的列要么是GROUP BY 指定的列,要么包含聚合组函数
所以用这样一句SQL就可以去掉重复项了:
select * from msg group by terminal_id
这样就得到我们想要的结果集了:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)