/ / अनुक्रम रैंक में रैंक - एसक्यूएल-सर्वर, tsql

क्वेरी में अनुक्रम रैंक - एसक्यूएल-सर्वर, tsql

मैं 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 )

रैंक आईडी द्वारा परिणामों को सॉर्ट करने के लिए "ऑर्डर बाय" में घन रैंक और इसका चयन चयन कथन में किया जाता है, घन रैंक में सबक्वायरी टीमआईडी के लिए योग (स्कोर) के आधार पर रैंक होगी