所以我在mysql数据库中查询下面显示的结果排行榜:
SELECT ur.user_id, ur.race_id, u.name, ur.race_points, ur.points_total,
FIND_IN_SET(points_total, (
SELECT GROUP_CONCAT( points_total
ORDER BY points_total DESC )
FROM user_results)) as Rank
FROM user_results as ur
LEFT JOIN users as u
ON u.id = ur.user_id
LEFT JOIN user_leagues as ul
ON ur.user_id = ul.user_id
JOIN leagues as l
ON ul.league_id = l.id
WHERE l.id = 1
GROUP BY ur.race_id
ORDER BY ur.race_id ASC
结果集如下所示
user_id, race_id, name, race_points, points_total, Rank
2 1 Jess 350 789 2
1 1 Ali 350 667 4
2 2 Jess 666 766 3
1 2 Ali 456 999 1
我遇到的问题是我需要将FIND IN SET函数创建的RANK列与GROUP BY一起应用。当我需要使用GROUP BY race_id进行排名时,它对整个结果集进行排名。因此,对于每个race_id,RANK列应为1或2,因为只有两个用户。
任何帮助都会非常感谢。
答案 0 :(得分:1)
您想要一个相关的子查询:
FIND_IN_SET(points_total, (
SELECT GROUP_CONCAT( points_total ORDER BY points_total DESC )
FROM user_results ur2
WHERE ur2.race_id = ur.race_id)) as Rank
还有其他方法可以在没有字符串操作的情况下实现此目的,但这应该可以解决您的特定问题。