共计 650 个字符,预计需要花费 2 分钟才能阅读完成。
1、理论问题
间断范畴问题也是一个十分经典的 SQL 编程问题,在理论的开发中也常常应用,解决的办法有比拟多,然而个别采纳数字辅助表和分组。
如下例子:
create table t(a int unsigned not null primary key);
insert into t value(1);
insert into t value(2);
insert into t value(3);
insert into t value(100);
insert into t value(101);
insert into t value(103);
insert into t value(104);
insert into t value(105);
下面的数据如何重到间断范畴:
2、解决办法
咱们看上面的语句返回的后果:
select a,@a := @a+1 rn from t,(select @a:=0) as a;
通过下面的辅助列 RN 阐明, 如果 SQL 后果将 a -rn 值,如果是不变的,阐明是间断的,
SELECT a,rn,a-rn
FROM(
SELECT a,@a := @a+1 rn FROM t,(SELECT @a:=0) AS a) b
认真剖析当前,再做一下分组
SELECT MIN(a) start_range,MAX(a) start_range FROM(
SELECT a,rn,a-rn AS diff
FROM(
SELECT a,@a := @a+1 rn FROM t,(SELECT @a:=0) AS a) b
) c
GROUP BY diff
3、后果一下教训:
在理论开发中,无关间断范畴和间断范畴会用到数字辅助表和分组来解决此类问题。