我不能爲我的生活弄清楚如何獲得X類別分數的加權排名。例如,學生需要回答3個類別中的10個問題(問題#和類別#最終都會變化)。爲了獲得總分,每個X(3)類別中的前1分將被添加到剩下的總共10個問題分數中。這是否需要遞歸CTE,只是創意窗口函數,循環?
這是數據。我用了一個CASE WHEN ROW_NUMBER()來獲取TopInCat
http://sqlfiddle.com/#!6/e6e9f/1
小提琴有更多的學生。
| Question | Student | Category | Score | 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就可以是空的或任何其他的東西。
| Question | Student | Category | Score | TopInCat | Sort | |----------|---------|----------|-------|----------|------| | 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)閾值,類別不再重要。所以第四類可以正常排序。
| Question | Student | Category | Score | TopInCat | Sort | |----------|---------|----------|-------|----------|------| | 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 |
我真的很感激任何幫助。在這幾天裏,我一直在嘲笑我。
這太棒了!謝謝!我開始這樣的事情,但認爲必須有更好的方法。我發現你的代碼存在一個小問題。在NotTopInCat - WHERE問題NOT IN不是特定於學生,所以它應該是WHERE NOT EXISTS(SELECT 1 FROM TopInCat TIC WHERE TIC.Student = WS.Student和TIC.Question = WS.Question)你能更新答案嗎?我會做更多的驗證,但我認爲這可能是最好的解決方案。再次感謝。 – cporichie
@cporichie啊是的,那時候我還在想'問題'是PK,其實'(Question,Student)'是PK。現在更新。 – AakashM