首頁 > 軟體

MySQL自動為查詢資料結果加序號

2022-12-19 14:01:47

資料表

DROP TABLE IF EXISTS tb_score;
CREATE TABLE tb_score(
    id INT(11) NOT NULL auto_increment,
    userid VARCHAR(20) NOT NULL COMMENT '使用者id',
    subject VARCHAR(20) COMMENT '科目',
    score DOUBLE COMMENT '成績',
    PRIMARY KEY(id)
)ENGINE = INNODB DEFAULT CHARSET = utf8;
INSERT INTO tb_score(userid,subject,score) VALUES ('001','語文',90);
INSERT INTO tb_score(userid,subject,score) VALUES ('001','數學',92);
INSERT INTO tb_score(userid,subject,score) VALUES ('001','英語',80);
INSERT INTO tb_score(userid,subject,score) VALUES ('002','語文',88);
INSERT INTO tb_score(userid,subject,score) VALUES ('002','數學',90);
INSERT INTO tb_score(userid,subject,score) VALUES ('002','英語',75.5);
INSERT INTO tb_score(userid,subject,score) VALUES ('003','語文',70);
INSERT INTO tb_score(userid,subject,score) VALUES ('003','數學',85);
INSERT INTO tb_score(userid,subject,score) VALUES ('003','英語',90);
INSERT INTO tb_score(userid,subject,score) VALUES ('003','政治',82);

MySQL給查詢加序號

一種普遍的解決方法是:通過定義使用者變數生成序號

舉例:查詢表中的資料並加上序號,對應的SQL為:

SELECT
	id,userid,subject,score, (@i :=@i + 1) AS '序號'
FROM
	tb_score,
	(SELECT @i := 0) AS itable;
+----+--------+---------+-------+--------+
| id | userid | subject | score | 序號   |
+----+--------+---------+-------+--------+
|  1 | 001    | 語文    |    90 |      1 |
|  2 | 001    | 數學    |    92 |      2 |
|  3 | 001    | 英語    |    80 |      3 |
|  4 | 002    | 語文    |    88 |      4 |
|  5 | 002    | 數學    |    90 |      5 |
|  6 | 002    | 英語    |  75.5 |      6 |
|  7 | 003    | 語文    |    70 |      7 |
|  8 | 003    | 數學    |    85 |      8 |
|  9 | 003    | 英語    |    90 |      9 |
| 10 | 003    | 政治    |    82 |     10 |
+----+--------+---------+-------+--------+
10 rows in set (0.00 sec)
SELECT
	*, (@i :=@i + 1) AS '序號'
FROM
	tb_score;
+----+--------+---------+-------+--------+
| id | userid | subject | score | 序號   |
+----+--------+---------+-------+--------+
|  1 | 001    | 語文    |    90 |     11 |
|  2 | 001    | 數學    |    92 |     12 |
|  3 | 001    | 英語    |    80 |     13 |
|  4 | 002    | 語文    |    88 |     14 |
|  5 | 002    | 數學    |    90 |     15 |
|  6 | 002    | 英語    |  75.5 |     16 |
|  7 | 003    | 語文    |    70 |     17 |
|  8 | 003    | 數學    |    85 |     18 |
|  9 | 003    | 英語    |    90 |     19 |
| 10 | 003    | 政治    |    82 |     20 |
+----+--------+---------+-------+--------+
10 rows in set (0.00 sec)

或者

SET @i=0;
SELECT id,userid,subject,score,@i:=@i+1 AS '序號' 
FROM tb_score;
+----+--------+---------+-------+--------+
| id | userid | subject | score | 序號   |
+----+--------+---------+-------+--------+
|  1 | 001    | 語文    |    90 |      1 |
|  2 | 001    | 數學    |    92 |      2 |
|  3 | 001    | 英語    |    80 |      3 |
|  4 | 002    | 語文    |    88 |      4 |
|  5 | 002    | 數學    |    90 |      5 |
|  6 | 002    | 英語    |  75.5 |      6 |
|  7 | 003    | 語文    |    70 |      7 |
|  8 | 003    | 數學    |    85 |      8 |
|  9 | 003    | 英語    |    90 |      9 |
| 10 | 003    | 政治    |    82 |     10 |
+----+--------+---------+-------+--------+
10 rows in set (0.00 sec)

解釋說明

1、(@i:=@i+1) 也可以寫成 @i:=@i+1,加括號是為了視覺上更清晰。

它代表的意思是:變數 i1 賦值給變數 i,在定義好一個變數後每次查詢都會給這個變數自增,每次執行查詢語句獲取結果後就不需要這個變數自增了。

2、(SELECT @i:=0) AS itable,定義使用者變數 i,設定初始值為 0,然後將它作為派生表使用,AS 定義了表的別名。

3、SET @i=0 。定義使用者變數 i,賦初值為 0

相關知識點

1、MySQL定義使用者變數的方式:

select @變數名 ,上面的SQL語句中,變數的名字是 i

2、使用者變數賦值:一種是直接用 "=" 號,另一種是用 ":=" 號。

=:= 的區別

使用 set 命令對使用者變數進行賦值時,兩種方式都可以使用,即:SET @變數名=xxxSET @變數名:=xxx

使用 select 語句對使用者變數進行賦值時,只能使用 ":=“ 方式,因為在 select 語句中,”=" 號被看作是比較操作符。

即:SELECT @變數名:=xxx

①:使用者變數

②:派生表

③:AS設定別名

到此這篇關於MySQL自動為查詢資料結果加序號的文章就介紹到這了,更多相關MySQL給查詢加序號內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com