用mysql查詢后,怎樣生成名次的順序號
成都網站建設哪家好,找創新互聯公司!專注于網頁設計、成都網站建設公司、微信開發、微信小程序開發、集團成都定制網站等服務項目。核心團隊均擁有互聯網行業多年經驗,服務眾多知名企業客戶;涵蓋的客戶類型包括:成都混凝土攪拌站等眾多領域,積累了大量豐富的經驗,同時也獲得了客戶的一致稱譽!
SELECT 語句中的 Order By 子句,決定返回記錄集合的排序方式
例如:
按照【名次】值,從小到大排序
Select * From 表名 Where ...... Order By 名次
按照【名次】值,從大到小排序
Select * From 表名 Where ...... Order By 名次 Desc
1. 直接在程序中實現;
這應該算是效率最高的一種,也極為方便。直接在你的開發程序中(PHP/ASP/C/...)等中,直接初始化一個變量nRowNum=0,然后在while 記錄集時,nRowNum++; 然后輸出即可。
2. 使用MySQL變量;在某些情況下,無法通過修改程序來實現時,可以考慮這種方法。
缺點,@x 變量是 connection 級的,再次查詢的時候需要初始化。一般來說PHP等B/S應用沒有這個問題。但C/S如果connection一只保持則要考慮 set @x=0
mysql select @x:=ifnull(@x,0)+1 as rownum,id,col
- from tbl
- order by col;
+--------+----+------+
| rownum | id | col |
+--------+----+------+
| 1 | 1 | 26 |
| 1 | 3 | 35 |
| 1 | 2 | 46 |
| 1 | 4 | 68 |
| 1 | 6 | 92 |
| 1 | 5 | 93 |
+--------+----+------+
6 rows in set (0.00 sec)
3. 使用聯接查詢(笛卡爾積)
缺點,顯然效率會差一些。
利用表的自聯接,代碼如下,你可以直接試一下 select a.*,b.* from tbl a,tbl b where a.col=b.col 以理解這個方法原理。
mysql select a.id,a.col,count(*) as rownum
- from tbl a,tbl b
- where a.col=b.col
- group by a.id,a.col;
+----+------+--------+
| id | col | rownum |
+----+------+--------+
| 1 | 26 | 1 |
| 2 | 46 | 3 |
| 3 | 35 | 2 |
| 4 | 68 | 4 |
| 5 | 93 | 6 |
| 6 | 92 | 5 |
+----+------+--------+
6 rows in set (0.00 sec)
4. 子查詢
缺點,和聯接查詢一樣,具體的效率要看索引的配置和MySQL的優化結果。
mysql select a.*,
- (select count(*) from tbl where col=a.col) as rownum
- from tbl a;
+----+------+--------+
| id | col | rownum |
+----+------+--------+
| 1 | 26 | 1 |
| 2 | 46 | 3 |
| 3 | 35 | 2 |
| 4 | 68 | 4 |
| 5 | 93 | 6 |
| 6 | 92 | 5 |
+----+------+--------+
6 rows in set (0.06 sec)
做為一款開源的數據庫系統,MySQL無疑是一個不做的產品。它的更新速度,文檔維護都不遜于幾大商業數據庫產品。估計在下一個版本中,我們可以看到由MySQL自身實現的ROWNUM。
SELECT @rownum:=@rownum+1 AS rownum, tablename.*
FROM (SELECT @rownum:=0) r, tablename
你也可以用下面的語句修改下一個起始值和步進值:
alter
table
tblorder
alter
column
orderid
counter
(2000,
50)
要重新開始:
alter
table
tablename
alter
column
orderid
counter
(1,
1)
可以用自增字段。你把數據庫的數據類型改成int類型,底下就會有個自增字段的勾選框,勾上就可以了。插入數據時就不用加上這個字段,會自動增加的,也是唯一的~
需要用row_number來給分組添加序號。
1、創建測試表,插入數據:
create?table?test(sid?int,sname?varchar(20),sclass?varchar(20),score?int);?insert?into?test?values?(1,'張三','一年一班',100)insert?into?test?values?(2,'李四','一年一班',78)insert?into?test?values?(3,'王五','一年一班',67)insert?into?test?values?(4,'趙六','一年一班',87)insert?into?test?values?(5,'badkano','一年二班',98)insert?into?test?values?(6,'百度知道團長','一年二班',99)insert?into?test?values?(7,'du小小動','一年二班',99)insert?into?test?values?(8,'劉備','一年三班',56)insert?into?test?values?(9,'張飛','一年三班',67)insert?into?test?values?(10,'關羽','一年三班',76)
2、要求按照班級總分給出班級排名(即序號),執行語句:
1
select?row_number()?over?(order?by?score?desc)?排名,sclass?班級,score?總分?from?(select?sclass,SUM(score)?score?from?test?group?by?sclass)?t
3、查詢結果:
分享標題:mysql怎么記錄序號,mysql順序號
網頁鏈接:http://vcdvsql.cn/article40/heceeo.html
成都網站建設公司_創新互聯,為您提供Google、動態網站、做網站、網站策劃、手機網站建設、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯