通过SQL查询获得团队排名

时间:2016-05-07 15:18:30

标签: php mysql sql database

我有这个SQL查询,用于根据他们的'点'获取我的数据库中团队的排名。

SELECT id, points, team_name, FIND_IN_SET( points, (
    SELECT GROUP_CONCAT( points
    ORDER BY points DESC )
    FROM teams )
    ) AS rank
    FROM teams
    WHERE id = ?
    LIMIT 1

我遇到的问题是,考虑到两支球队拥有相同分数的情况,例如:说有两支球队,每支球队都有'0'分。该查询返回两个团队的排名“1”。

我希望拥有较低'id'的球队在拥有相同积分的球队之间拥有更高的排名。

例如,说team1和team2都有'5'分。我希望ID较低的团队排名第一。

如何更改我的查询呢?

由于

1 个答案:

答案 0 :(得分:0)

您使用的方法在MySQL中的适用性有限,因为它取决于group_concat()中的中间子字符串的长度。但是,您可以为此目的进行修改:

SELECT id, points, team_name,
       FIND_IN_SET(CONCAT(points, ':', id),
                   (SELECT GROUP_CONCAT(points, ':', id ORDER BY points DESC, id )
                    FROM teams
                   )
                  ) AS rank
FROM teams
WHERE id = ?
LIMIT 1;

更好的方法是:

select id, points, team_name,
       (select count(*)
        from teams t2
        where t2.points > t.points or
              (t2.points = t.points and t2.id <= t.id)
       ) as rank
from teams t
where id = ?;