परिणामों को पहले 2 रैंकिंग पंक्तियों तक सीमित करें


22

SQL Server 2008 में, मैं RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)डेटा सेट को वापस करने के लिए उपयोग कर रहा हूं RANK। लेकिन मेरे पास प्रत्येक विभाजन के लिए सैकड़ों रिकॉर्ड हैं, इसलिए मुझे रैंक 1, 2, 3 ...... 999 से मान मिलेगा। लेकिन मैं RANKsप्रत्येक में केवल 2 तक चाहता हूं PARTITION

उदाहरण:

ID   Name    Score    Subject
1    Joe      100      Math
2    Jim      99       Math
3    Tim      98       Math
4    Joe      99       History
5    Jim      100      History
6    Tim      89       History
7    Joe      80       Geography
8    Tim      100      Geography
9    Jim      99       Geography

मैं चाहता हूं कि परिणाम:

SELECT Subject, Name, RANK() OVER (PARTITION BY Subject ORDER BY Score DESC)
FROM Table
Subject        Name      Rank
Math           Joe        1
Math           Jim        2
History        Jim        1
History        Joe        2
Geography      Tim        1
Geography      Jim        2

मैं प्रत्येक श्रेणी में केवल 1 और 2 रैंक चाहता हूं। मैं यह कैसे करु?

जवाबों:


15

आप मूल क्वेरी rank()को एक सबक्वेरी में उपयोग कर सकते हैं और परिणामों को फ़िल्टर करने वाली क्वेरी के साथ लपेट सकते हैं।


समझ में आता है। मेरी इच्छा है कि Microsoft इसे और सरल बना दे अर्थात RANK फ़ंक्शन में एक नंबर डाल दे। RANK(2) OVER (PARTITION BY Col2 ORDER B Y Col3) AS Top_2_Ranks। हो सकता है कि यह भविष्य के रिलीज में हो। हालांकि विचार के लिए धन्यवाद।
UB01

@ UB01: या बेहतर अभी तक, एक WHEREखंड में खिड़की वाले कार्यों का उपयोग करना अच्छा होगा ।
जॉन ऑफ ऑल ट्रेड्स


0

मुझे लगता है कि SQL सर्वर में ऐसा करने का तरीका एक सामान्य तालिका अभिव्यक्ति के साथ विंडो फ़ंक्शन को संयोजित करना है:

with cte as (
SELECT Subject, Name, RANK() OVER (PARTITION BY Subject ORDER BY Score DESC) as ordinal
FROM Table
)
select * from cte where ordinal <= 2

-1

Teradara के लिए वैकल्पिक रूप से आप कर सकते हैं:

SELECT 
Subject, 
Name, 
RANK() OVER (PARTITION BY Subject ORDER BY Score DESC) as RN
FROM Table
QUALIFY a.RN <= 2

3
ठीक है, यह सब ठीक हो सकता है, लेकिन सवाल विशेष रूप से SQL सर्वर के बारे में है।
dezso 11
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.