需要帮助尝试使用GROUP BY进行排名

时间:2009-07-24 00:41:58

标签: sql-server-2008 stored-procedures rank dense-rank

我很难通过他们所在的家庭小组对每个学生进行排名。

假数据示例。

HomeGroup
1. Team RED
2. Team BLUE
3. Team Skeet
4. Team GREEN

Students
1. John, Score - 34, Team RED
2. Jill, Score - 87.3, Team RED
3. Fred, Score - 41, Team GREEN
4. Jane, Score 93, Team BLUE
...

我的输出如下

Scores
StudentId 1, Score 34, Rank - 5th 
StudentId 2, Score 87.3, Rank - 1st 
StudentId 3, Score 41, Rank - 9th 
StudentId 4, Score 94, Rank - 1st.

我正在尝试使用DENSE_RANK ..并且如果我针对SINGLE HomeGroup(例如homegroup = 1)运行它,则可以正常工作......但我不确定如何在所有家庭组中执行此操作。< / p>

我猜我需要一个更新查询,它有一个子查询...而且这个子查询有它自己的子查询...... ??

我很困惑:(而且我一直在考虑我拒绝使用的邪恶游标,除非我有一把枪在我头上(因为我相信它可以通过'Set'符号正确处理)。

1 个答案:

答案 0 :(得分:1)

获得团队中每个学生的密集学习:

SELECT *, DENSE_RANK() OVER (PARTITION BY Team ORDER BY Score DESC)
   FROM Students;

我不清楚你想要更新什么。