MySQL排名SQL語句寫法

一般在使用MySQL時,會碰到根據多個排名條件計算一組數據的排名狀況,條件相同的則排名一致。spa

假設有表table,兩個條件字段conditionA降序排序和conditionB升序排序,條件相同排名一致,排名信息保存在dense_rank字段。排序

作法:定義@conditionA, @conditionB, @dense_rank, @id_rank四個用戶變量。其中@conditionA, @conditionB用來保存當前一行的數據條件, @dense_rank用來保存當前的排名值,@id_rank用來保存序號,查詢結果按照order by conditionA desc, conditionB asc寫,則最終寫法以下,主要使用了case end。it

SELECT io

  CASEtable

  WHEN @conditionA =-1 AND @conditionB = -1 THEN @dense_rank := 1  #判斷是否第一個記錄,是則排名爲第一變量

  WHEN @conditionA  = conditionA  AND @conditionB = conditionB  THEN @dense_rank #判斷當前記錄是否與以前的同樣,是則保持排名不變數據

  ELSE @dense_rank := @dense_rank + 1 #其餘狀況,排名加1查詢

  END AS dense_rank,tab

  

  @id_rank := @id_rank+1 AS i_rank, #遞增序號字段di

  @conditionA := conditionA AS conditionA, #更新條件變量爲當前記錄的值

  @conditionB := conditionB AS conditionB #更新條件變量爲當前記錄的值

FROM

   (SELECT @id_rank:=0) i_rank,   #初始化序號變量

   (SELECT @dense_rank:=0) d,  #初始化排名變量

   (SELECT @conditionA:=-1) s,  #初始化條件變量

   (SELECT @conditionB:=-1) c,  #初始化條件變量

   table

order by conditionA desc, conditionB asc

相關文章
相關標籤/搜索