龙空技术网

MYSQL数据排名与指定数据排名获取

巴蜀文子 185

前言:

现时各位老铁们对“sql查排名”大约比较关注,各位老铁们都需要了解一些“sql查排名”的相关内容。那么小编同时在网上搜集了一些关于“sql查排名””的相关资讯,希望兄弟们能喜欢,朋友们快快来了解一下吧!

今天主要与大家分享的是MySQL数据排名与指定条件数据排名的获取,数据的排名在我们做用户的排序或者其它排序的时候是比较常见的,当然也可以通过其它处理方式来进行数据排名的计算。这里我们主要与大家分享的是MySQl中的SQL语句的排名处理

现有一个发帖统计表结构:

CREATE TABLE `answers`.`posting_static`  (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(100) NULL DEFAULT '',  `post` int(11) NULL DEFAULT 0,  `created_at` timestamp NULL,  `updated_at` datetime NULL,  PRIMARY KEY (`id`));

数据实示例:

我们要取得全部用户的发帖量的排行,怎么进行捏?

首先我们需要对用户的发帖量进行排序,对排序后的结果进行编号(也可以先查询后排序再编号),这个编号就是我们需要的排名,那么这个编号怎么编呢?

在Mysql中我们可以借助 @rownum 来实现,

@rownum := @rownum + 1 中 := 是赋值的作用,意思是先执行@rownum + 1,然后把值赋给@rownum。

(SELECT @rownum := 0) r 这句话的意思是设置rownum字段的初始值为0,即编号从1开始。

所有数据实现SQL:

SELECT a.*, @rownum := @rownum + 1 AS rank FROM (SELECT @rownum := 0) r, `posting_static` AS a ORDER BY a.post DESC;

按条件获取获取单个用户的排名:

SELECT b.* SELECT FROM(SELECT a.*, @rownum := @rownum + 1 AS rank FROM (SELECT @rownum := 0) r, `posting_static` AS a ORDER BY a.post DESC) as b where b.`username` = '王五';

标签: #sql查排名