Preface This article mainly introduces the relevant content about MYSQL to realize ranking and query the specified user ranking function (parallel ranking function), and shares it for your reference and learning. Let's take a look at the detailed introduction. Table structure: CREATE TABLE test.testsort ( id int(11) NOT NULL AUTO_INCREMENT, uid int(11) DEFAULT 0 COMMENT 'user id', score decimal(10, 2) DEFAULT 0.00 COMMENT 'score', PRIMARY KEY (id) ) ENGINE = INNODB AUTO_INCREMENT = 1 CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Test sorting' ROW_FORMAT = DYNAMIC; Idea: You can sort first and then number the results; you can also query the results first and then sort and number them. illustrate: @rownum := @rownum + 1 In this sentence, := is used for assignment. This means that @rownum + 1 is executed first, and then the value is assigned to @rownum. (SELECT @rownum := 0) r This sentence means setting the initial value of the rownum field to 0, that is, the numbering starts from 1. Achieve ranking: Method 1: SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT * FROM testsort ORDER BY score DESC) AS t; Method 2: SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, testsort AS t ORDER BY t.score DESC; result: View the ranking of a specified user: Method 1: SELECT b.* FROM ( SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT * FROM testsort ORDER BY score DESC) AS t ) AS b WHERE b.uid = 222; Method 2: SELECT b.* from ( SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, testsort AS t ORDER BY t.score DESC ) as b where b.uid = 222; result: To achieve a tie ranking (same ranking for the same score): SELECT obj.uid, obj.score, CASE WHEN @rowtotal = obj.score THEN @rownum WHEN @rowtotal := obj.score THEN @rownum :=@rownum + 1 WHEN @rowtotal = 0 THEN @rownum :=@rownum + 1 END AS rownum FROM ( SELECT uid, score FROM testsort ORDER BY score DESC ) AS obj, (SELECT @rownum := 0 ,@rowtotal := NULL) Query the ranking of a specified user: SELECT total.* FROM (SELECT obj.uid, obj.score, CASE WHEN @rowtotal = obj.score THEN @rownum WHEN @rowtotal := obj.score THEN @rownum :=@rownum + 1 WHEN @rowtotal = 0 THEN @rownum :=@rownum + 1 END AS rownum FROM ( SELECT uid, score FROM testsort ORDER BY score DESC ) AS obj, (SELECT @rownum := 0 ,@rowtotal := NULL) r) AS total WHERE total.uid = 222; Summarize The above is the full content of this article. I hope that the content of this article will have certain reference learning value for your study or work. If you have any questions, you can leave a message to communicate. Thank you for your support for 123WORDPRESS.COM. You may also be interested in:
|
<<: Implementation of Docker building Maven+Tomcat basic image
>>: Component design specifications for WeChat mini-program development
This article example shares the specific code of ...
How to use if in Linux to determine whether a dir...
I don’t know why, but UI likes to design honeycom...
Batch comments in SQL Server Batch Annotation Ctr...
MySQL 5.7.8 introduced the json field. This type ...
Table of contents DOM node Element node: Text nod...
<div class="box"> <img /> &...
When href is needed to pass parameters, and the p...
Table of contents 1. Script vim environment 2. Ho...
Checkboxes are very common on web pages. Whether ...
Recently I have been saying that design needs to h...
Preface The count function is used to count the r...
Recently, new projects have used springcloud and ...
The previous blog post talked about the Registry ...
summary: The following is a method for changing t...