MYSQL将group by应用于rank列

时间:2015-06-05 11:14:23

标签: mysql sql

所以我在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,因为只有两个用户。

任何帮助都会非常感谢。

1 个答案:

答案 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

还有其他方法可以在没有字符串操作的情况下实现此目的,但这应该可以解决您的特定问题。