mybatis实现排行榜SQL代码

mql如下

SELECT  b.*, (@curRand := @curRand + 1) AS rank FROM (
		SELECT trcp.user_id as userId,count( t.id ) AS finishNum,u.HEAD_PORTRAIT AS headPortrait,u.name as userName
		FROM osi_task AS t
		LEFT JOIN osi_task_relate_assign_person AS trcp ON t.ID = trcp.task_id
		LEFT JOIN osi_user_info AS u ON trcp.user_id = u.ID
		<where>
			trcp.state = #{state,jdbcType=INTEGER}
			AND t.IS_DEL = 2 AND u.type = #{userType,jdbcType=INTEGER}
		</where>
		GROUP BY trcp.user_id
		ORDER BY finishNum DESC
		<if test="state != null">
			<if test="state == 2">
				,t.finish_time DESC
			</if>
			<if test="state == 3">
				,t.end_time DESC
			</if>
		</if>
		) as b ,(SELECT @curRand := 0) AS c
		<if test="limit != null">
			limit  #{limit,jdbcType=INTEGER}
		</if>

其中rank是排名,可以自定义条件。

查询某个人的排名:

select * from (
		SELECT b.*, (@curRand := @curRand + 1) AS rank FROM (
		SELECT trcp.user_id,count( t.id ) AS myNum
		FROM osi_task AS t
		LEFT JOIN osi_task_relate_assign_person AS trcp ON t.ID = trcp.task_id
		LEFT JOIN osi_user_info AS u ON trcp.user_id = u.ID
		WHERE trcp.state = #{state,jdbcType=INTEGER}
		AND t.IS_DEL = 2 AND u.type = 6
		GROUP BY trcp.user_id
		ORDER BY myNum DESC
		) as b ,(SELECT @curRand := 0) AS c ) as d
		<where>
		 d.user_id = #{user_id,jdbcType=VARCHAR}
		</where>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值