mysql排序後顯示排序序號

2022-07-26 20:15:10 字數 2319 閱讀 1379

網上找的乙個比較齊全的解釋案例,拿來記錄一下

①   := 與 = 的區別

:=   賦值的意思。在set update select 中表示賦值的意思,用的比較少一般都用=,但是在用變數實現行號時(比如本文標題獲取排列序號),一定要用:=。

=   等於的意思,只有當set 和 update時,和:=的意思是一樣的,表示賦值,其餘情況都是等於的意思。

② 使用者變數 @

@rank 是對乙個叫rank的引數進行賦值。對使用者變數賦值有兩種方式,一種直接用"="另一種用":="。其區別在於使用set命令對使用者變數賦值時,兩種方式都可以使用;當使用select語句對使用者變數進行賦值時,只能使用「:=」方式,因為在select語句中,「=」被看做是比較操作符。

1、根據某欄位按序排列並獲取排序號。(當訪問量相同的時候,按正常順序,繼續排序)

select a.*,@rank:=@rank + 1as rank_no

from (

select *from `logs`

where log_created> "2017-09-01"order by count desc

) a, (select @rank:= 0) b

set @rank= 0;

select a.log_id,a.log_created,a.count,@rank:=@rank + 1as rank_no

from (

select *from `logs`

where log_update > "2017-09-01"order by count desc

) a;

結果展示:

踩坑:注意這裡的a 和 b 的表別名,不取的話會報sql異常哦

2、根據某欄位按序排列獲取排序號,且當該字段的值存在多個相同的記錄時,則相同值排序號相同。

set @rank = 0 ,@rowtotal :=null;

select

a.log_id, a.log_created, a.count,

case

when @rowtotal =a.count then

@rank

when @rowtotal :=a.count then

@rank := @rank + 1end as rank_no

from

(select *from `logs`

where log_update > "2017-09-01"order by count desc

) a

踩坑:a.count,後面的,不可少

結果展示:

) a上面的sql裡又增加了乙個引數sart,表示當前每次相同的個數,(同時還增加了rowtotal1,用於區別之前的roetotal,因為在這段sql中rowtotal在執行期間已被多次賦值,不適合做sart的比較引數)下一組記錄,將在之前的排名上加上此引數就表示,下一組記錄的排序編碼。

結果展示:

關於排序後原序號問題

乙個陣列的數,排序後要求其原序號 方法一 如果陣列總共有小於1000個數 所以給每個ti都 1001,在加上當前序號 可以保證排序的時候序號不干擾排序 又可以方便輸出序號 只需mod1001輸出序號,1001 輸出值 int num a i 1001 序號 int sum a i 1001 值樣例 ...

mysql分組排序加序號

參照 一 需求 新加乙個sort 字段,初始值為1,按照parentid分組新增sort值。根據原資料的parentid,postime排序,不同parentid值,sort 值從1開始重新增加 二 實現 1 update co test ast12 set sort 3 select 4t2.i ...

mysql先排序後判斷 mysql 排序後在查詢

今天寫sql 的時候,遇到乙個問題,有乙個圖書表和乙個章節表 book chapter 我需要隨機五本書,並且獲取這五本書的最新章節和標題 rank代表多少章 我的sql是 select t.from select b.c.rank,c.title from book b inner join ch...