mysql排序后顯示排序序號


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

①   := 與 = 的區別

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

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

② 用戶變量 @

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

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

SELECT a.*,@rank:=@rank + 1 AS 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 + 1 AS 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 + 1
END AS rank_no
FROM
    (
        SELECT * 
        FROM `logs`
        WHERE log_update > "2017-09-01"
        ORDER BY count DESC
    ) a

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

結果展示:

 

3、根據某字段按序排列獲取排序號,且當該字段的值存在多個相同的記錄時,則相同值的記錄的排序號相同,並且下一組值的排序號為上一組內記錄數+上一個排序號。

SET @rank = 0 ,@rowtotal := NULL ,@rowtotal1 = NULL ,@sart := 0;
SELECT a.log_id, a.log_created, a.count,
    CASE
        WHEN @rowtotal = a.count THEN @rank
        WHEN @rowtotal := a.count THEN @rank := @rank + 1 + @sart
    WHEN @rowtotal = 0 THEN @rank := @rank +1 +@sart
        END AS rank_no,
         CASE
        WHEN @rowtotal1 = a.count THEN @sart := @sart + 1
        WHEN @rowtotal1 := a.count THEN @sart := 0
    WHEN @rowtotal1 =0 THEN @sart := 0
        END AS sart
        FROM
        (
        SELECT *
        FROM `logs`
        WHERE log_update > "2017-09-01"
        ORDER BY count DESC
        ) a

 

 

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


————————————————
版權聲明:本文為CSDN博主「crainnogao」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/gao763024185/article/details/79638052


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM