關於數字的經典SQL程式設計:連續範圍問題
【IT168 技術】連續範圍問題也是一個非常經典的SQL程式設計問題。為了使講解易於理解,我們先來建立一些測試資料。
#div_code img{border:0px;}<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->CREATE TABLE t ( a INT UNSIGNED NOT NULL PRIMARY KEY );
INSERT INTO t VALUES(1);
INSERT INTO t VALUES(2);
INSERT INTO t VALUES(3);
INSERT INTO t VALUES(100);
INSERT INTO t VALUES(101);
INSERT INTO t VALUES(103);
INSERT INTO t VALUES(104);
INSERT INTO t VALUES(105);
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->CREATE TABLE t ( a INT UNSIGNED NOT NULL PRIMARY KEY );
INSERT INTO t VALUES(1);
INSERT INTO t VALUES(2);
INSERT INTO t VALUES(3);
INSERT INTO t VALUES(100);
INSERT INTO t VALUES(101);
INSERT INTO t VALUES(103);
INSERT INTO t VALUES(104);
INSERT INTO t VALUES(105);
可以看到1~3是連續的,100~101是連續的,103~105是連續的,那麼怎麼能得到如下表所示的結果呢?
我們來看下面這句SQL語句及其返回的結果集。
#div_code img{border:0px;}<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->mysql> SELECT a,@a:=@a+1 rn FROM t,(SELECT @a:=0) AS a;
+-----+------+
| a | rn |
+-----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 100 | 4 |
| 101 | 5 |
| 103 | 6 |
| 104 | 7 |
| 105 | 8 |
+-----+------+
8 rows in set (0.00 sec)
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->mysql> SELECT a,@a:=@a+1 rn FROM t,(SELECT @a:=0) AS a;
+-----+------+
| a | rn |
+-----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 100 | 4 |
| 101 | 5 |
| 103 | 6 |
| 104 | 7 |
| 105 | 8 |
+-----+------+
8 rows in set (0.00 sec)
rn列是人為計算出來的行號。是不是可以透過連續給出的行號來反映出連續範圍的規律呢?如果還沒有看出,那麼再看下面這個SQL及它的返回結果集。
#div_code img{border:0px;}<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->mysql> SELECT a,rn,a-rn
-> FROM
-> (SELECT a,@a:=@a+1 rn FROM t,(SELECT @a:=0) AS a)
-> AS b;
+-----+------+------+
| a | rn | a-rn |
+-----+------+------+
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 3 | 0 |
| 100 | 4 | 96 |
| 101 | 5 | 96 |
| 103 | 6 | 97 |
| 104 | 7 | 97 |
| 105 | 8 | 97 |
+-----+------+------+
8 rows in set (0.00 sec)
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->mysql> SELECT a,rn,a-rn
-> FROM
-> (SELECT a,@a:=@a+1 rn FROM t,(SELECT @a:=0) AS a)
-> AS b;
+-----+------+------+
| a | rn | a-rn |
+-----+------+------+
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 3 | 0 |
| 100 | 4 | 96 |
| 101 | 5 | 96 |
| 103 | 6 | 97 |
| 104 | 7 | 97 |
| 105 | 8 | 97 |
+-----+------+------+
8 rows in set (0.00 sec)
相關文章
- MySQL連續範圍問題MySql
- 四個經典的SQL程式設計問題SQL程式設計
- sql關於連續日期的統計報表問題SQL
- SQL根據分組求連續範圍SQL
- FPGA數字訊號處理(25)數字相關器設計(經典結構)FPGA
- 實體店是否屬於數字化智慧經營的適用範圍?
- 智力題(程式設計師面試經典)程式設計師面試
- SQL language裡面的經典問題SQL
- 八數碼 經典問題
- C++的程式設計典範 (轉)C++程式設計
- 程式設計藝術家經典試題解讀:猜生日問題程式設計
- Java程式設計師面試時應注意的三個經典問題!Java程式設計師面試
- 如何在Mac上設定系統範圍的字數統計服務Mac
- MySQL 缺失範圍問題MySql
- 經典程式設計引言程式設計
- 《Cracking the Coding Interview程式設計師面試金典》----最大連續數列和View程式設計師面試
- 50道經典的JAVA程式設計題(目錄)Java程式設計
- 一個經典程式設計面試題的“隱退”程式設計面試題
- 演算法程式設計之美連續數之和等於某個數演算法程式設計
- 關於聯合索引,範圍查詢,時間列索引的幾個問題索引
- [併發程式設計]-關於 CAS 的幾個問題程式設計
- 關於PHP程式設計師解決問題的能力PHP程式設計師
- MySQL 間斷範圍問題MySql
- JavaScript函數語言程式設計入門經典JavaScript函數程式設計
- JavaScript閉包與變數的經典問題JavaScript變數
- 筆試程式碼題--搜狗--汪仔做對的題數範圍筆試
- 關於java安全性程式設計問題求助!!!Java程式設計
- 關於SLG中人物可到達範圍計算的想法(轉)
- 【PL/SQL】向表中插入連續數字之PL/SQL方法SQL
- 關於mysql連線的問題MySql
- 關於連線池的問題!
- 關於Java編碼規範的問題Java
- 關於考勤模組中設計的問題
- 關於詳細設計/程式碼的同步問題--請教
- 程式設計師C語言經典筆試題程式設計師C語言筆試
- SQL經典五十道題SQL
- 經典SQL面試題1SQL面試題
- 經典SQL面試題2SQL面試題