嗨我試圖通過使用得分獲得比賽的前十名獲獎者。問題是,當有兩個用戶相同的分數,例如我只得到前9名有效(應該是11個記錄返回,如果有兩個前3名得分,其餘的都是唯一的例子)...MSSQL選擇前10名,但包括重複值的列
我不知道如何解決這個問題,並希望得到一些指導。
由於事先
伊恩
嗨我試圖通過使用得分獲得比賽的前十名獲獎者。問題是,當有兩個用戶相同的分數,例如我只得到前9名有效(應該是11個記錄返回,如果有兩個前3名得分,其餘的都是唯一的例子)...MSSQL選擇前10名,但包括重複值的列
我不知道如何解決這個問題,並希望得到一些指導。
由於事先
伊恩
應一一記錄返回如果有兩個前3分
聽起來像你想要的使用dense_rank
。
這將爲您提供排名前10位的所有行。
select T.Score
from (
select Score,
dense_rank() over(order by Score) as rn
from YourTable
) T
where T.rn <= 10
頂端語法允許的關係
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
你嘗試了嗎?
你想這樣做:
SELECT TOP(10) WITH TIES
FirstName, LastName, score
FROM winners
ORDER BY score;
欲瞭解更多信息,請參閱TOP (Transact-SQL)
@Mikeal事實上,重讀問題denserank可能是我們所需要的 – buckley
大,作品一種享受!謝謝。每天學習新的東西...抱歉,延遲響應,它只是得到了我需要實現這一點。我不想推動我的運氣,但有沒有辦法在前10名中至少包含一個類別,即如果有3個類別,並且所有前十名都來自類別1,我需要推倒前兩名從這個類別中,然後將第2和第3類的前1個分數添加到結果中?或者我需要通過代碼來做到這一點(使用C#) – Ianc22
@ lanc22我想這是可能的,但我不完全明白你想要做什麼。你應該問這是一個新問題。在你的新問題中,你應該包括一些樣本數據,你現在使用的查詢(這個dense_rank查詢)以及你使用樣本數據查找的輸出。 –