मैं mssql में अनुक्रम संख्या प्राप्त करना चाहता हूं। कृपया नीचे देखे।
वहाँ एक मेज है।
UserID Score TeamID
------------------------------
1 100 1
2 200 1
3 500 2
4 600 2
5 700 2
6 1000 3
मैं टीम द्वारा कुल स्कोर समूह द्वारा क्रमबद्ध करना चाहता हूं। निचे देखो
RankID UserID Score TeamID TotalScore
-----------------------------------------------------------
1 3 500 2 1800
1 4 600 2 1800
1 5 700 2 1800
2 6 1000 3 1000
3 1 100 1 300
3 2 200 1 300
मैं केवल एक एसक्यूएल क्वेरी को कोड करना चाहता हूं। मुझे किसी की मदद करें मैं यह कैसे कर सकता हूं? धन्यवाद।
उत्तर:
जवाब के लिए 3 № 1यह काम करना चाहिए:
;WITH TotalScore AS (
SELECT UserID, Score, TeamID,
SUM(Score) OVER (PARTITION BY TeamID) AS TotalScore
FROM mytable
)
SELECT DENSE_RANK() OVER (ORDER BY TotalScore DESC) AS RankID,
UserID, Score, TeamID, TotalScore
FROM TotalScore
ORDER BY TotalScore DESC, Score
सामान्य तालिका अभिव्यक्ति प्रति कुल स्कोर की गणना करती है TeamID
के खिड़की संस्करण का उपयोग कर SUM
। का उपयोग करते हुए DENSE_RANK
इस गणना क्षेत्र के साथ हम आसानी से आवश्यक उत्पन्न कर सकते हैं RankID
.
उत्तर № 2 के लिए 1
आप इसे आजमा सकते हैं
SELECT
RANK() OVER(ORDER BY i.TotalScore DESC) AS RankID
,A.*
FROM
(
SELECT
UserID
,Score
,TeamID
,(SELECT SUM(Score) FROM yourTable tb2 WHERE tb2.TeamID = tb1.TeamID) AS TotalScore
FROM yourTable tb1
) A
ORDER BY A.TotalScore DESC
जवाब के लिए 0 № 3
नीचे के साथ प्रयास करें,
Select DENSE_RANK() over(Order by (Select Sum(Score) from @tablename V where V.TeamID=T.TeamID ) desc )RankID
,*,
Sum(Score) over(Partition by TeamID) TotalScore from @tablename T
order by DENSE_RANK() over(Order by (Select Sum(Score) from @tablename V where V.TeamID=T.TeamID ) desc )
रैंक आईडी द्वारा परिणामों को सॉर्ट करने के लिए "ऑर्डर बाय" में घन रैंक और इसका चयन चयन कथन में किया जाता है, घन रैंक में सबक्वायरी टीमआईडी के लिए योग (स्कोर) के आधार पर रैंक होगी