MySQL range問題
首先建立這樣一個表
-
create table range_problem(
-
a int(10) unsigned not null,
- primary key (a));
插入以下測試資料
-
insert into range_problem values(1);
-
insert into range_problem values(2);
-
insert into range_problem values(3);
-
insert into range_problem values(48);
-
insert into range_problem values(50);
-
insert into range_problem values(51);
-
insert into range_problem values(52);
-
insert into range_problem values(53);
-
insert into range_problem values(66);
- insert into range_problem values(67);
如何將這些結果按範圍輸出呢?
結果為:
【思路】
方案一及解決思路
:
首先做一個這樣的返回集
-
select a,@a:=@a+1 as b
- from range_problem,(select @:a=0) as a;
再做另一個返回集:(通過返回的結果來看,發現一組連續值內,連續數值的差是一個常量)
解決方案:
-
select a,b,a-b as diff
-
from(
-
select a,@a:=@a+1 b
-
from range_problem,
-
(select @a:=0) as a
- ) as b;
由於a-b為固定值,我們可以將通過為其分組,來實現最後的範圍
-
select min(a) start_range, max(b) end_range
-
from(select a,b,a-b as diff
-
from(select a,@a:=@a+1 as b
-
from range_problem,(select @a:=0) as a
-
) as b
-
) as c
- group by diff;
方案二及解決思路:(通過子查詢)
比如1~3的範圍,最大值應該是3。
方法是,大於或等於當範圍值,且最後一個值為間斷的最小值。
-
select a,(
-
select min(a)
-
from range_problem a
-
where not exists (select *
-
from range_problem b
-
where a.a+1 = b.a)
-
and a.a >= c.a) max
- from range_problem c;
最後只需要再將max列分組,然後獲得最大值和最小值就是我們要的結果了:
-
select min(a) start_range,max(a) end_range
-
from(select a,
-
(select min(a)
-
from range_problem a
-
where not exists (select *
-
from range_problem b
-
where a.a+1 = b.a)
-
and a.a >= c.a) max
-
from range_problem c) d
- group by max;
但此解決方案的掃描成本變為O(N^2),對於表中資料量很大的情況,其效能則會變得十分糟糕。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1248574/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- uniapp 使用 picker 的 range-key 不生效問題APP
- MySQL 問題MySql
- mysql 1130 問題MySql
- Python錯題本(1)range()Python
- mysql 轉義問題MySql
- mysql 遇到的問題MySql
- Mysql:常見問題MySql
- MySQL死鎖問題MySql
- mysql多版本共存問題MySql
- MySQL 死鎖問題分析MySql
- SpringBoot mysql驅動問題Spring BootMySql
- mysql checksum 報錯問題。MySql
- MySQL SSL連線問題MySql
- MySQL 大欄位問題MySql
- MySQL許可權問題MySql
- Mysql索引失效問題demoMySql索引
- MySQL5.6新特性之Multi-Range ReadMySql
- 問題MySQL server has gone awayMySqlServerGo
- Mysql 表名大小寫問題MySql
- mysql主從同步問題整理MySql主從同步
- mysql學習整理所有問題MySql
- mysql 8.0.29 解除安裝問題MySql
- MySQL 中文 like 問題解決MySql
- MySQL:一個特殊的問題MySql
- mysql相關問題總結MySql
- MySQL 中字元編碼問題MySql字元
- mysql insert into ... select的鎖問題MySql
- mysql 刪表引出的問題MySql
- mysql odbc delphi連線問題MySql
- mysql大小寫問題解決MySql
- 測試MySQL鎖的問題MySql
- mysql常見問題總結MySql
- mysql隱式轉換問題MySql
- MySQL:MySQL工具以及5.7mysqlbinlog|mysql速度極慢問題MySql
- 上手MySQL之解決問題:not allowed to connect to this MySQL serverMySqlServer
- JAVA訪問雲資料mysql出現問題JavaMySql
- mysql叢集02:幾個問題MySql
- mac 配置mysql環境 Navicat 問題MacMySql
- mysql的時區錯誤問題MySql