2012-07-05 12 views
12

मेरे पास MySQL में एक प्रश्न था, क्या यह सही ढंग से किया गया। लेकिन पुस्तक कोड थोड़ा अलग है।1 द्वारा यह आदेश क्या है?

पुस्तक:

use tennis; 
select playerno, datediff(coalesce(end_date, current_date), 
begin_date) as Difference, position 
from committee_members 
where datediff(coalesce(end_date, current_date), begin_date) > 500 
order by 1; 

1 से इस आदेश को क्या है?

मेरे कोड भी काम करता है और लगभग छोड़कर एक ही है:

select playerno, datediff(coalesce(end_date, current_date) AS Data, 
order by Data; 
+0

StackOverflow - क्यों यू फ़ॉर्मेट करने के लिए आसान नहीं ??? :( – Master

+2

जब तक आप स्वरूपण सहायता पढ़ते हैं, तब तक कोड को प्रारूपित करना आसान है :) – Ryan

+0

कोड ब्लॉक बनाने के लिए लाइन की शुरुआत पर बस 4 रिक्त स्थान जोड़ें। लेकिन पहले एक से पहले एक खाली रेखा सुनिश्चित करें। आप संपादक के सहायता आइकन पर और देख सकते हैं। – rcdmk

उत्तर

23

order by 1 का अर्थ है "पहले क्षेत्र मैं चयनित द्वारा आदेश" - यानी, इस मामले में, order by playerno के रूप में ही है, क्योंकि playerno था सूची में पहला क्षेत्र।

संपादित करें: SQL-92 standard के एक मसौदे का शीघ्रता से अवलोकन करने से इस बात की पुष्टि इस:

10)If ORDER BY is specified, then each <sort specification> in the 
     <order by clause> shall identify a column of T. 

     Case: 

     a) If a <sort specification> contains a <column name>, then T 
      shall contain exactly one column with that <column name> and 
      the <sort specification> identifies that column. 

     b) If a <sort specification> contains an <unsigned integer>, 
      then the <unsigned integer> shall be greater than 0 and not 
      greater than the degree of T. The <sort specification> iden- 
      tifies the column of T with the ordinal position specified by 
      the <unsigned integer>. 

इस मामले में, b एक है कि लागू करने के लिए लगता है। हालांकि मुझे यकीन है कि इस मसौदे और मानक के अंतिम पाठ (मानक और दूसरे के एक संस्करण के बीच उल्लेख नहीं करने के बीच) में कम से कम कुछ बदलाव हैं, ऐसा लगता है कि यह मौलिक कुछ बदल जाएगा (शायद कभी)।

+0

धन्यवाद! समझ गया ! अच्छा और स्पष्ट! – Master

+0

अनुपालन मानक की बजाय, इसे MySQL के अपने दस्तावेज़ों के साथ वापस ले जाएं: https://dev.mysql.com/doc/refman/5.7/en/select.html कीवर्ड: '2 से ऑर्डर' – Sinkeat

5

इसे "ऑर्डिन बाय ऑर्डिनल" के रूप में जाना जाता है, मूल रूप से उस स्थिति में कॉलम द्वारा क्रमबद्ध किया जाता है। 1 द्वारा ऑर्डर का मतलब पहले चयनित कॉलम द्वारा ऑर्डर किया गया है। आपके उदाहरण में, यह ORDER BY playerno

मैं इस तरह से ऐसा करने की अनुशंसा नहीं करता हूं, हालांकि यह स्पष्ट नहीं है कि यह किस कॉलम का संदर्भ दे रहा है और यदि कॉलम ऑर्डर बदलता है तो क्वेरी अलग-अलग परिणाम लौटाएगी।

अधिक संसाधन:

Quick Tip: Order By 1 Desc

Bad habits to kick : ORDER BY ordinal

SQL: order by

+0

..... .................ठीक ठीक ! – Master

संबंधित मुद्दे