首先通过创建表和插入构建一个测试环境
-
create table missed_minimum(
-
a int unsigned primary key,
-
b char(1) not null);
-
insert into missed_minimum select 1,'z';
-
insert into missed_minimum select 2,'x';
-
insert into missed_minimum select 3,'a';
-
insert into missed_minimum select 4,'b';
-
insert into missed_minimum select 6,'c';
-
insert into missed_minimum select 7,'d';
-
insert into missed_minimum select 9,'e';
最小缺失值问题是找出记录中不连续的最小值,即在此表数据的情况下,则查询应该返回5
解决方案一 (通过exists解决)
-
select min(a)+1 as missming
-
from missed_minimum a
-
where not exists (select *
-
from missed_minimum b
-
where a.a+1=b.a);
解决方案二 (通过outer join解决)
-
select min(a.a)+1 as missming
-
from missed_minimum a
-
left join missed_minimum b
-
on a.a+1 = b.a
-
where y.a is null;
按照方案二给出思路
-
select a.*,b.*
-
from missed_minimum a
-
left join missed_minimum b
-
on a.a+1 = b.a;
得出 通过a.a+1 = b.a可以找出a列中所有不连续的缺失值(方案一的子查询原理一样)
在上述sql语句加上where y.a is null (方案一通过not exists得出a列是4、7、9)
得出
最后再用min(a.a)+1处理
得出最小缺失值为5
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29773961/viewspace-1255436/
,如需转载,请注明出处,否则将追究法律责任。