समस्या:
आप रिकॉर्ड के समूह द्वारा उत्पन्न राशि के आधार पर पंक्तियों को क्रमित करना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में training
चार कॉलम में डेटा के साथ:id , लॉगिन , वर्ष , और स्कोर ।
आईडी | लॉगिन | वर्ष | स्कोर |
---|---|---|---|
1 | एंडी | 2018 | 24 |
2 | लुसी | 2019 | 25 |
3 | एंडी | 2019 | 20 |
4 | लुसी | 2018 | 16 |
5 | गैरी | 2019 | 18 |
6 | गैरी | 2018 | 19 |
7 | गैरी | 2017 | 22 |
8 | लुसी | 2017 | 21 |
9 | एंडी | 2017 | 26 |
आइए खिलाड़ियों के कुल स्कोर के अनुसार रिकॉर्ड को अवरोही क्रम में रखते हुए, सभी वर्षों में कुल स्कोर के साथ प्रत्येक खिलाड़ी का लॉगिन नाम प्राप्त करें।
समाधान:
हम कुल फ़ंक्शन SUM()
के आधार पर रिकॉर्ड ऑर्डर करने के लिए ORDER BY ऑपरेटर का उपयोग करेंगे , जो सभी वर्षों में प्रत्येक खिलाड़ी के लिए कुल स्कोर की गणना करता है।
यहां वह प्रश्न है जो आप लिखेंगे:
SELECT login, SUM(score) AS total_score FROM training GROUP BY login ORDER BY SUM(score) DESC;
ये रहा परिणाम:
लॉगिन | कुल_स्कोर |
---|---|
एंडी | 70 |
लुसी | 62 |
गैरी | 59 |
चर्चा:
यदि आप SUM()
जैसे समग्र फ़ंक्शन द्वारा लौटाए गए मान के अनुसार पंक्तियों को ऑर्डर करना चाहते हैं, तो ORDER BY का उपयोग करें . ORDER BY ऑपरेटर के बाद एग्रीगेट फंक्शन आता है (हमारे उदाहरण में, SUM()
) DESC को इस फ़ंक्शन के बाद अवरोही क्रम को निर्दिष्ट करने के लिए रखा गया है। इस प्रकार, उच्चतम समग्र मान पहले प्रदर्शित होते हैं, फिर उत्तरोत्तर निम्न मान प्रदर्शित होते हैं। आरोही क्रम में क्रमबद्ध करने के लिए, आप ASC निर्दिष्ट कर सकते हैं या किसी भी कीवर्ड को छोड़ सकते हैं, क्योंकि आरोही डिफ़ॉल्ट सॉर्ट क्रम है।
उपरोक्त प्रश्न में, हम प्रत्येक खिलाड़ी के लॉगिन और सभी वर्षों के लिए उनके स्कोर का योग चुनते हैं। इस कुल स्कोर की गणना एक तर्क के रूप में स्कोर कॉलम के साथ SUM () का उपयोग करके की जाती है। हम इस समग्र मान के लिए एक उपनाम जोड़ते हैं (SUM(score) AS total_score
); आप ORDER BY क्लॉज (ORDER BY total_score DESC
में एग्रीगेट फ़ंक्शन के बजाय इस उपनाम का इस्तेमाल कर सकते हैं )।
ध्यान दें कि हम लॉगिन . शामिल करते हैं ग्रुप बाय में। यदि हम SELECT में एक कॉलम शामिल करते हैं, तो हमें GROUP BY में भी कॉलम का उपयोग करना चाहिए। इस उदाहरण में, हम कॉलम लॉगिन के बाद ग्रुप बाय क्लॉज का उपयोग करते हैं क्योंकि हम इस कॉलम को सेलेक्ट में रखते हैं। ध्यान दें कि GROUP BY को क्वेरी में ORDER BY से पहले रखा गया है।