एसक्यूएल कई स्तंभ आदेश


634

मैं एसक्यूएल में कई कॉलम और अलग-अलग दिशाओं में सॉर्ट करने की कोशिश कर रहा हूं। column1अवरोही क्रमबद्ध किया जाएगा, और column2आरोही।

मैं यह कैसे कर सकता हूँ?


85
यह "googling जवाब" पहला परिणाम है। कम से कम यह तब था जब मैंने "दो कॉलम द्वारा एसक्यूएल ऑर्डरिंग" को गुगलाया। यह समकक्ष आधिकारिक डॉक्टर पृष्ठ की तुलना में बहुत अधिक पठनीय का एक नरक है जो परिणामों के मेरे पहले पृष्ठ में भी दिखाई नहीं दिया, जब तक कि मैंने अपनी क्वेरी को "mysql 'क्रम में बदलकर" "नहीं किया
एंड्रयू मार्टिन

11
यह देखते हुए कि कितनी बार एक SO प्रश्न Google के ऊपर आता है, मुझे हमेशा यह भयानक लगता है कि लोग इसके साथ उत्तर देते हैं। SO या तो उत्तर देने के लिए यहाँ है या नहीं, और मुझे समझ में नहीं आ रहा है कि साइट ट्रैफ़िक को दूर करना एक अच्छी बात क्यों है
user001

जवाबों:


1022
ORDER BY column1 DESC, column2

जब भी दो या दो से अधिक पंक्तियों के लिए फ़ील्ड समान होते हैं column1, तब (अवरोही) पहले, और फिर column2(आरोही, जो कि डिफ़ॉल्ट है) द्वारा सब कुछ ठीक हो जाता है column1


2
यहां कॉलम 1 या कॉलम 2 को कैसे ऑर्डर किया जाए?
पोलीदेव

@PoliDev, यह कॉलम 1 द्वारा DESCending ऑर्डर में और कॉलम 2 द्वारा (ASCending ऑर्डर में) ऑर्डर करता है
zaheer

110
स्पष्टता के लिए, यह सब कुछ column1पहले और बाद में column2जब भी column1दो पंक्तियों के लिए फ़ील्ड बराबर होता है।
निक बेन्स

2
यह आपके RDBMS की सीमा तक किसी भी संख्या के भाव ( सिर्फ कॉलम नहीं ) के लिए काम करेगा ।
इग्नासियो वाज़क्वेज़-अब्राम्स

2
@NickBenes ... या आप कह सकते हैं: यह द्वारा column2सॉर्ट करता है और फिर STABLE सॉर्ट करता है column1। यह उन लोगों के लिए अधिक स्पष्ट है जो जानते हैं कि स्थिर छंटाई क्या है।
एटम

356

अन्य उत्तरों में एक ठोस उदाहरण का अभाव है, इसलिए यहां यह दिया गया है:

निम्नलिखित लोगों की तालिका को देखते हुए :

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826

यदि आप नीचे दिए गए क्वेरी को निष्पादित करते हैं:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

परिणाम सेट इस तरह दिखेगा:

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706

23
यह उत्तर बहुत ही सहायक और छोटे स्वीकृत उत्तर के लिए एक महान पूरक है।
एंडरलैंड

3
कुछ अच्छे उदाहरण हैं, बहुत से लोग सोचते हैं कि आप एक समय में 2 कॉलम कैसे छाँट सकते हैं जो वास्तव में तब भी नहीं होता है जब आप ऑर्डर क्वेरी के लिए 2 कॉलम डालते हैं
मुहम्मद फ़राज़

जब हम तीन स्तंभों के साथ सॉर्ट करते हैं तो यह समान परिणाम प्रदान करता है और पहला कॉलम क्रम क्रम समान होता है और बाकी सब कुछ अलग होता है। Ex: 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc क्या कोई रास्ता है जिससे हम इस पर काबू पा सकते हैं?
परमेश कोरकुटी

1
@ParameshKorrakuti: यह अपेक्षित परिणाम है। आपके उदाहरण में परिणामी ऑर्डर केवल तभी अलग होगा FirstName, LastNameजब विशिष्ट के साथ डुप्लिकेट प्रविष्टियाँ थींYearOfBirth
थॉमस सीजी डी विलेना

उदाहरण के लिए धन्यवाद, यह मेरे जैसे लोगों को समझता है।
13


19

एकाधिक कॉलम ऑर्डर करना दोनों कॉलम के संबंधित मूल्यों पर निर्भर करता है: यहां मेरा टेबल उदाहरण है, जहां दो कॉलम अक्षर और संख्याओं के साथ नाम दिए गए हैं और इन दो कॉलमों में मान asc और desc ऑर्डर हैं।

यहाँ छवि विवरण दर्ज करें

अब मैं प्रदर्शन करके आदेश आदेश नीचे क्रियान्वित करते हुए इन दो कॉलम में:

यहाँ छवि विवरण दर्ज करें

अब फिर से मैं इन दो कॉलमों में नए मान डालता हूँ, जहाँ ASC क्रम में वर्णमाला मान :

यहाँ छवि विवरण दर्ज करें

और उदाहरण तालिका के कॉलम इस तरह दिखते हैं। अब फिर से वही ऑपरेशन करें:

यहाँ छवि विवरण दर्ज करें

आप देख सकते हैं कि पहले कॉलम में मान डीएससी क्रम में हैं लेकिन दूसरा कॉलम एएससी क्रम में नहीं है।


इस डेटा को भी डालें (g, 10),(g,12)। फिर, अपना ऑर्डर-बाय क्वेरी चलाएं, आपको ASCऑर्डर के रूप में दूसरा कॉलम मिलता है (इसका मतलब हैg-10,g-11,g-12)
पुगल

6

आप कई स्थिति पर कई आदेश का उपयोग कर सकते हैं,

ORDER BY 
     (CASE 
        WHEN @AlphabetBy = 2  THEN [Drug Name]
      END) ASC,
    CASE 
        WHEN @TopBy = 1  THEN [Rx Count]
        WHEN @TopBy = 2  THEN [Cost]
        WHEN @TopBy = 3  THEN [Revenue]
    END DESC 

क्या अनुक्रमण काम करता है, अगर मैं "ORDER BY" के अंदर "CASE" का उपयोग करता हूं?
रौनसूर जमान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.