mysql实现用户排名并查询指定用户的名次

表中主要字段:

  • id 主键id
  • user_id 用户id
  • point_num 积分数量
    在这里插入图片描述

思路:可以先排序,再对结果进行编号;也可以先查询结果,再排序编号。

实现排名:
方法1:

SELECT
	a.*,
	@rownum := @rownum + 1 AS rownum 
FROM
	( SELECT * FROM user_point ORDER BY point_num DESC ) AS a,
	( SELECT @rownum := 0 ) r

方法2:

SELECT
	a.*,
	@rownum := @rownum + 1 AS rownum 
FROM
	( SELECT @rownum := 0 ) r,
	user_point AS a 
ORDER BY
	a.point_num DESC

查询结果:
在这里插入图片描述

说明:
@rownum := @rownum + 1 中的 := 是赋值的作用,这句话的意思是先执行@rownum + 1,然后把值赋给@rownum;
(SELECT @rownum := 0) r 这句话的意思是设置rownum字段的初始值为0。后面再加1赋值给@rownum,即编号从1开始。

查询指定用户排名:
方法1:

SELECT
	b.* 
FROM
	(
	SELECT
		a.*,
		@rownum := @rownum + 1 AS rownum 
	FROM
		( SELECT * FROM user_point ORDER BY point_num DESC ) AS a,
		( SELECT @rownum := 0 ) r 
	) AS b 
WHERE
	b.user_id = 'U1001'

方法2:

SELECT
	b.* 
FROM
	(
	SELECT
		a.*,
		@rownum := @rownum + 1 AS rownum 
	FROM
		( SELECT @rownum := 0 ) r,
		user_point AS a 
	ORDER BY
		a.point_num DESC 
	) AS b 
WHERE
	b.user_id = 'U1001'

查询结果:
在这里插入图片描述

从指定的用户中查询自己排名第几

SELECT
	b.* 
FROM
	(
	SELECT
		a.*,
		@rownum := @rownum + 1 AS rownum 
	FROM
		( SELECT * FROM user_point WHERE user_id IN ( 'U1001', 'U1002', 'U1003', 'U1005') ORDER BY point_num DESC ) AS a,
		( SELECT @rownum := 0 ) r
	) AS b 
WHERE
	b.user_id = 'U1001'

查询结果:
在这里插入图片描述
如果是根据求和后,计数后的数据进行排名,只需要先求和或者计数后再进行排名即可!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值