Maison > Article > base de données > mysql非占位排名_MySQL
找了好久的mysql排名解决办法,排名结果:1,2,2,3,4,5,5
看sql吧,相信可以看的懂。是从stackoverflow中找的。
SELECT name,clazz,user_id,class_id,xn,scoreSum,awardedMarks,totalPoint, CASE WHEN @prev_value = totalPoint THEN @rank_count WHEN @prev_value := totalPoint THEN @rank_count := @rank_count + 1 END AS rank FROM (SELECT au.`NAME` AS NAME,CONCAT(vc.`levelname`,vc.`gradename`,vc.`classname`) AS clazz, cs.user_id,cs.class_id, cs.`xn`,SUM(cs.`project_score`) AS scoreSum,IFNULL(ca.`marks`,0) awardedMarks, (SUM(cs.`project_score`)+IFNULL(ca.`marks`,0)) AS totalPoint FROM ct_score cs LEFT JOIN ct_project cp ON cs.`project_id`=cp.`project_id` LEFT JOIN aq_user au ON cs.`user_id`=au.`USER_ID` LEFT JOIN vw_xj_e_class vc ON cs.`class_id`=vc.`classid` LEFT JOIN `ct_awardedmarks` ca ON ca.`class_id`=cs.`class_id` AND ca.`user_id`=cs.`user_id` ,(SELECT @prev_value := NULL) f,(SELECT @rank_count := 0) m WHERE cp.`participant`='Personal' GROUP BY cs.`user_id`) t ORDER BY totalPoint DESC;