Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL में पंक्तियों की संख्या कैसे करें

समस्या:

आप परिणाम तालिका में प्रत्येक पंक्ति को एक अलग संख्या देना चाहेंगे।

उदाहरण:

हमारे डेटाबेस में furniture निम्नलिखित कॉलम में डेटा के साथ:code (प्राथमिक कुंजी) और name

<थ>नाम
कोड
101 बिस्तर
202 सोफा
333 कुर्सी
123 किताबों की अलमारी
235 टेबल
766 डेस्क

furniture टेबल फर्नीचर के उन टुकड़ों का नाम संग्रहीत करता है जिन्हें हम क्रमांकित करना चाहते हैं।

समाधान:

SELECT ROW_NUMBER() OVER() AS num_row,
  code, 
  name
FROM furniture;

क्वेरी फ़र्नीचर के प्रत्येक टुकड़े की पंक्ति संख्या उसके नाम और कोड के साथ लौटाती है:

<थ>नाम
num_row कोड
1 बिस्तर 101
2 सोफा 202
3 कुर्सी 333
4 किताबों की अलमारी 123
5 टेबल 235
6 डेस्क 766

ध्यान दें कि फर्नीचर के टुकड़ों के नाम क्रमबद्ध नहीं हैं।

चर्चा:

यदि आप परिणाम सेट में प्रत्येक पंक्ति को क्रमांकित करना चाहते हैं, तो SQL ROW_NUMBER() प्रदान करता है समारोह। इस फ़ंक्शन का उपयोग SELECT . में किया जाता है अन्य स्तंभों के साथ खंड। ROW_NUMBER() . के बाद खंड, हम OVER() . कहते हैं समारोह। यदि आप OVER . के लिए कोई तर्क देते हैं , पंक्तियों की संख्या किसी भी स्तंभ के अनुसार क्रमबद्ध नहीं की जाएगी। इस प्रकार, प्रदर्शित पंक्तियों का क्रम गैर-नियतात्मक होगा; ज्यादातर मामलों में, यह वह क्रम है जिसमें रिकॉर्ड तालिका में डाले गए थे। पंक्तियों की संख्या 1 से शुरू होती है। हमारे उदाहरण में, प्रत्येक रिकॉर्ड में 1 से 6 तक की संख्या होती है।

हम कॉलम का उपयोग करके पंक्ति संख्याएँ भी निर्दिष्ट कर सकते हैं। नीचे दिए गए उदाहरण में, हम नाम के आधार पर रिकॉर्ड की संख्या को क्रमबद्ध करते हैं। हम उस तर्क को OVER . में पास करके ऐसा करते हैं साथ में ORDER BY (यह नाम कॉलम के अनुसार रिकॉर्ड को सॉर्ट करता है):

SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
  name, 
  code
FROM furniture;

जब आप परिणाम सेट को देखते हैं, तो आप क्रमबद्ध पंक्तियों को उनकी संख्याओं के साथ देखते हैं:

<थ>नाम
पंक्ति कोड
1 बिस्तर 101
2 किताबों की अलमारी 123
3 कुर्सी 333
4 डेस्क 766
5 सोफा 202
6 टेबल 235

ROW_NUMBER() . द्वारा प्रदान की गई नंबरिंग परिणाम तालिका में पंक्तियों के क्रम से स्वतंत्र है। नीचे दिए गए उदाहरण में, हम सॉर्ट किए गए कॉलम नाम (OVER(ORDER BY name) ), लेकिन हम दूसरे कॉलम के अनुसार सेट किए गए परिणाम में रिकॉर्ड प्रदर्शित करते हैं (हमारे उदाहरण में, ORDER BY code )।

SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
  name, 
  code
FROM furniture
ORDER BY code;

क्वेरी ने प्रत्येक पंक्ति की संख्या लौटा दी, लेकिन ये संख्याएँ आरोही क्रम में नहीं हैं, क्योंकि रिकॉर्ड कॉलम कोड के अनुसार क्रमबद्ध हैं:

<थ>नाम
पंक्ति कोड
1 बिस्तर 101
2 किताबों की अलमारी 123
5 सोफा 202
6 टेबल 235
3 कुर्सी 333
4 डेस्क 766

सॉर्ट की गई पंक्तियों का डिफ़ॉल्ट क्रम आरोही है, लेकिन आप DESC का उपयोग करके अवरोही क्रम में भी सॉर्ट कर सकते हैं कॉलम के नाम के बाद कीवर्ड जिसके द्वारा आप सॉर्ट करना चाहते हैं:

SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS num_row,
  name, 
  code
FROM furniture
ORDER BY code DESC;

उपरोक्त क्वेरी ने परिणाम सेट लौटा दिया:

<थ>नाम
पंक्ति कोड
4 डेस्क 766
3 कुर्सी 333
6 टेबल 235
5 सोफा 202
2 किताबों की अलमारी 123
1 बिस्तर 101

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ZDLRA - RMAN-20035 अमान्य उच्च RECID

  2. TimescaleDB के लिए उन्नत डेटाबेस निगरानी और प्रबंधन

  3. डेटाबेस रखरखाव योजनाएँ बनाना

  4. त्वरित फ़ाइल प्रारंभ:सेटअप के दौरान प्रभाव

  5. लूप के बिना एक सेट या अनुक्रम उत्पन्न करें - भाग 2