我很抱歉我的奇怪标题,但我不知道我到底在寻找什么。任务很简单。我有比赛表。另一个表组。每个小组都有几名参赛者。在最后一个表中存储了参赛者的结果。任务是获得每组的前三名参赛者。
所以我必须遍历各个组,获取每个组的前三名参赛者(根据获得的分数)并将它们附加到某个变量中。
这是伪代码:
CREATE OR REPLACE PROCEDURE get_first_three_of_all(contestants OUT SOME_TYPE) AS
CURSOR groups SELECT...
BEGIN
FOR group IN groups LOOP
APPEND(contestants, get_first_three_of_one_group(group.id))
END LOOP;
END;
我不知道如何解决这个任务。我什至不知道我应该寻找什么。请你这么好心并帮助我好吗?谢谢。
编辑:我的表格的简化结构:
- 比赛:competition_id
- 参赛者:contestant_id
- GroupContestant:contestant_group_id、competition_d、group_number、contestant_id
- 结果:concentant_group_id、陪审员、积分
选择获取一组数据(组号YYY)在这里:
SELECT * FROM (
SELECT res.contestant_group_id, SUM(res.points) AS points
FROM Result res
WHERE res.couple_group_id IN (SELECT couple_group_id
FROM GroupContestant
WHERE competition_id = XXX
AND group_number = YYY)
GROUP BY res.contestant_group_id
ORDER BY points DESC
)
WHERE ROWNUM <= 3;