【发布时间】:2016-02-11 01:34:50
【问题描述】:
我这辈子都不知道如何获得 X 类别分数的加权排名。例如,学生需要回答 3 个类别的 10 个问题(问题的数量和类别的数量最终都会变化)。要获得总分,每个 X (3) 个类别中的前 1 分将被添加到剩下的任何内容中,从而总计 10 个问题总分。
这是数据。我使用 CASE WHEN Row_Number() 来获取 TopInCat
http://sqlfiddle.com/#!6/e6e9f/1
小提琴有更多的学生。
|问题 |学生 |类别 |分数 | TopInCat | |---------|----------|----------|--------|--------- -| | 120149 | 125 | 6 | 1 | 1 | | 120127 | 125 | 6 | 0.9 | 0 | | 120124 | 125 | 6 | 0.8 | 0 | | 120125 | 125 | 6 | 0.7 | 0 | | 120130 | 125 | 6 | 0.6 | 0 | | 120166 | 125 | 6 | 0.5 | 0 | | 120161 | 125 | 6 | 0.4 | 0 | | 120138 | 125 | 4 | 0.15 | 1 | | 120069 | 125 | 4 | 0.15 | 0 | | 120022 | 125 | 4 | 0.15 | 0 | | 120002 | 125 | 4 | 0.15 | 0 | | 120068 | 125 | 2 | 0.01 | 1 | | 120050 | 125 | 3 | 0.05 | 1 | | 120139 | 125 | 2 | 0 | 0 | | 120156 | 125 | 2 | 0 | 0 |这是我设想的外观,但不一定是这样。我只需要按 3 个类别详细数据列出 10 个问题,这样我就可以对下面的排序 1-10 列进行求和和平均。 999 可以为 null 或其他任何内容,只要我能总结出重要的内容并提供详细信息即可。
|问题 |学生 |类别 |分数 | TopInCat |排序 | |---------|----------|----------|--------|--------- -|--------| | 120149 | 125 | 6 | 1 | 1 | 1 | | 120138 | 125 | 4 | 0.15 | 1 | 2 | | 120068 | 125 | 2 | 0.01 | 1 | 3 | | 120127 | 125 | 6 | 0.9 | 0 | 4 | | 120124 | 125 | 6 | 0.8 | 0 | 5 | | 120125 | 125 | 6 | 0.7 | 0 | 6 | | 120130 | 125 | 6 | 0.6 | 0 | 7 | | 120166 | 125 | 6 | 0.5 | 0 | 8 | | 120161 | 125 | 6 | 0.4 | 0 | 9 | | 120069 | 125 | 4 | 0.15 | 0 | 10 | | 120022 | 125 | 4 | 0.15 | 0 | 999 | | 120002 | 125 | 4 | 0.15 | 0 | 999 | | 120050 | 125 | 3 | 0.05 | 1 | 999 | | 120139 | 125 | 2 | 0 | 0 | 999 | | 120156 | 125 | 2 | 0 | 0 | 999 |最后一件事,一旦达到 X (3) 阈值,类别就不再重要。所以第 4 个类别会正常排序。
|问题 |学生 |类别 |分数 | TopInCat |排序 | |---------|----------|----------|--------|--------- -|--------| | 120149 | 126 | 6 | 1 | 1 | 1 | | 120138 | 126 | 4 | 0.75 | 1 | 2 | | 120068 | 126 | 2 | 0.50 | 1 | 3 | | 120127 | 126 | 6 | 0.9 | 0 | 4 | | 120124 | 126 | 6 | 0.8 | 0 | 5 | | 120125 | 126 | 6 | 0.7 | 0 | 6 | | 120130 | 126 | 6 | 0.6 | 0 | 7 | | 120166 | 126 | 6 | 0.5 | 0 | 8 | | 120050 | 126 | 3 | 0.45 | 1 | 9 |******** | 120161 | 126 | 6 | 0.4 | 0 | 10 | | 120069 | 126 | 4 | 0.15 | 0 | 999 | | 120022 | 126 | 4 | 0.15 | 0 | 999 | | 120002 | 126 | 4 | 0.15 | 0 | 999 | | 120139 | 126 | 2 | 0 | 0 | 999 | | 120156 | 126 | 2 | 0 | 0 | 999 |我非常感谢任何帮助。这几天一直在纠结这个问题。
【问题讨论】:
标签: sql-server sql-server-2008 window-functions recursive-cte