2012-11-07 20 views
6

में मोड की गणना करें मैंने पिछले पोस्ट से जवाब देखा है, जो ठीक काम करता है लेकिन मेरे पास एक छोटी दुविधा है। एक ही परिदृश्य लेना:एसक्यूएल


एक तालिका जो प्रति वर्ग छात्रों के ग्रेड सूचीबद्ध करती है। मैं एक परिणाम सेट है कि लग रहा है चाहता हूँ की तरह:

BIO...B 
CHEM...C 


कहाँ 'बी' और 'सी' वर्ग के लिए मोड हैं और वर्ग के लिए मोड प्राप्त करना चाहते हैं।

एक बार मैं नीचे दिए गए क्वेरी आवेदन किया, मैं निम्नलिखित उत्पादन मिल गया:

Class | Score | Freq | Ranking 
2010 | B | 8  | 1 
2010 | C | 8  | 1 
2011 | A | 10 | 1 
2012 | B | 11 | 1 

2010 में, मैं एक ही आवृत्ति के साथ दो ग्रेड की है। क्या होगा अगर मैं उच्चतम स्कोर प्रदर्शित करना चाहता हूं, इस मामले में "बी" होगा। मैं उसे कैसे प्राप्त कर सकता हूं? मुझे पत्र ग्रेड को रैंकिंग आवंटित करने की आवश्यकता होगी, लेकिन मुझे यकीन नहीं है कि कैसे। कृपया सलाह दें। धन्यवाद।

पहले पोस्ट: SQL Server mode SQL

क्वेरी मैं पुनः प्राप्त करने के डेटा पीटर से जवाब था इस्तेमाल किया:

;WITH Ranked AS ( 
SELECT 
    ClassName, Grade 
    , GradeFreq = COUNT(*) 
    , Ranking = DENSE_RANK() OVER (PARTITION BY ClassName ORDER BY COUNT(*) DESC) 
FROM Scores 
GROUP BY ClassName, Grade 
) 
SELECT * FROM Ranked WHERE Ranking = 1 

उत्तर

5

बदलें:

SELECT * FROM Ranked WHERE Ranking = 1 

करने के लिए:

SELECT Class, MIN(Grade) AS HighestGrade, Freq, Ranking 
FROM Ranked 
WHERE Ranking = 1 
GROUP BY Class, Freq, Ranking 
+0

ठीक है, मैंने बदल दिया है। यह बढ़िया काम करता है। मैं बस इस क्वेरी में MIN फ़ंक्शन का उपयोग करके पचाने की कोशिश कर रहा हूं। धन्यवाद। – Frida

+0

कारण MIN() काम करता है क्योंकि 'उच्च' ग्रेड वर्णमाला में पहले होने लगते हैं। चूंकि आप बेहतर ग्रेड वापस करना चाहते हैं, जब दो मोड के लिए बंधे होते हैं, तो न्यूनतम कार्य के माध्यम से वर्णमाला की शुरुआत के करीब एक को ढूंढना, ऐसा करने में मदद करता है। – zipppy