Query to rank rows in groups

前端 未结 3 873
既然无缘
既然无缘 2021-01-20 10:57

I\'m using Apache Derby 10.10.

I have a list of participants and would like to calculate their rank in their country, like this:

|        Country |           


        
3条回答
  •  自闭症患者
    2021-01-20 11:36

    SQL

    SELECT c.name AS Country,
           p.name AS Participant,
           p.points AS Points,
           (SELECT COUNT(*)
            FROM Participant p2
            JOIN Team t2 ON p2.team_id = t2.id
            WHERE t2.country_id = t.country_id
              AND (p2.points < p.points
                   OR p2.points = p.points AND p2.name <= p.name)) AS country_rank
    FROM Country c
    JOIN Team t ON c.id = t.country_id
    JOIN Participant p ON t.id = p.team_id
    ORDER BY c.name, p.points, p.name;
    

    Online Demo

    SQL Fiddle demo: http://sqlfiddle.com/#!5/f48f8/14

    Explanation

    A simple ANSI-SQL subselect can be used to do the same job, counting the number of records for participants in the same country with a lower score or with the same score and a name that is alphabetically no higher.

提交回复
热议问题