MySQL排名SQL語句寫法

來源:互聯網
上載者:User

標籤:

通常在使用MySQL時,會碰到根據多個排名條件計算一組資料的排名情況,條件相同的則排名一致。

假設有表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。

SELECT 

  CASE

  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,

  

  @id_rank := @id_rank+1 AS i_rank, #遞增序號欄位

  @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




MySQL排名SQL語句寫法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.