आपने पूछा है कि लगता है एक उचित प्रश्न की तरह। SQL में काम करने के अलग-अलग तरीके हैं और कभी-कभी कुछ तरीके दूसरों से बेहतर होते हैं। रैंकिंग की समस्या अनेक, अनेक उदाहरणों में से एक है। आपके प्रश्न का "उत्तर" यह है कि, सामान्य तौर पर, order by
group by
. से बेहतर प्रदर्शन करने जा रहा है MySQL में। हालांकि यह भी उस विशेष डेटा पर निर्भर करता है और जिसे आप "बेहतर" मानते हैं।
प्रश्न के साथ विशिष्ट मुद्दे यह हैं कि आपके पास तीन अलग-अलग प्रश्न हैं जो तीन अलग-अलग चीजें लौटाते हैं।
पहला सभी कर्मचारियों को "घने रैंक" के साथ लौटाता है जो समान है। उस शब्दावली का उपयोग जानबूझकर किया जाता है क्योंकि यह ANSI dense_rank()
से मेल खाती है फ़ंक्शन जो MySQL समर्थन नहीं करता है। इसलिए, यदि आपका वेतन 100, 100, और 10 है, तो यह दो पंक्तियों को 1 की रैंकिंग के साथ और एक को 2 की रैंकिंग के साथ लौटाएगा।
यदि संबंध हैं तो दूसरा अलग परिणाम देता है। यदि वेतन 100, 100, 10 हैं, तो यह संस्करण 1 की रैंकिंग वाली कोई पंक्ति नहीं लौटाएगा, 2 की रैंकिंग वाली दो पंक्तियाँ, और 3 की रैंकिंग वाली एक पंक्ति।
तीसरा एक पूरी तरह से अलग परिणाम सेट देता है, जो सिर्फ वेतन और वेतन की रैंकिंग है।
मेरी टिप्पणी आपके डेटा पर प्रश्नों की कोशिश करने के लिए निर्देशित की गई थी। वास्तव में, आपको यह तय करना चाहिए कि आप वास्तव में क्या चाहते हैं, दोनों एक कार्यात्मक और एक प्रदर्शन परिप्रेक्ष्य से।