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

ऑरैकल में रिकॉर्ड की श्रेणी में श्रेणियों का चयन कैसे करें

यह एक अच्छा तरीका है, फैंसी नाम "Tabibitosan method "अकेती ज्यूज़ोउ द्वारा दिया गया।

SQL> WITH data AS
  2    (SELECT num - DENSE_RANK() OVER(PARTITION BY status ORDER BY num) grp,
  3      status,
  4      num
  5    FROM t
  6    )
  7  SELECT MIN(num)
  8    ||' - '
  9    || MAX(num) range,
 10    COUNT(*) cnt
 11  FROM data
 12  WHERE status='A'
 13  GROUP BY grp
 14  ORDER BY grp
 15  /

RANGE         CNT
------ ----------
1 - 3           3
6 - 6           1
9 - 10          2

SQL>

नोट DENSE_RANK का उपयोग करना बेहतर है डुप्लिकेट से बचने के लिए।

तालिका

SQL> SELECT * FROM t ORDER BY num;

       NUM S
---------- -
         1 A
         1 A
         2 A
         2 A
         3 A
         4 U
         5 U
         6 A
         7 U
         8 U
         9 A

       NUM S
---------- -
        10 A

12 rows selected.

num =1 के लिए डुप्लीकेट हैं।

DENSE_RANK का उपयोग करना :

SQL> WITH data AS
  2    (SELECT num - DENSE_RANK() OVER(PARTITION BY status ORDER BY num) grp,
  3      status,
  4      num
  5    FROM t
  6    )
  7  SELECT MIN(num)
  8    ||' - '
  9    || MAX(num) range,
 10    COUNT(*) cnt
 11  FROM data
 12  WHERE status='A'
 13  GROUP BY grp
 14  ORDER BY grp
 15  /

RANGE         CNT
------ ----------
1 - 3           5
6 - 6           1
9 - 10          2

SQL>

ROW_NUMBER . का उपयोग करना :

SQL> WITH DATA AS
  2    (SELECT num - ROW_NUMBER() OVER(PARTITION BY status ORDER BY num) grp,
  3      status,
  4      num
  5    FROM t
  6    )
  7  SELECT MIN(num)
  8    ||' - '
  9    || MAX(num) range,
 10    COUNT(*) cnt
 11  FROM data
 12  WHERE status='A'
 13  GROUP BY grp
 14  ORDER BY grp
 15  /

RANGE         CNT
------ ----------
2 - 3           2
1 - 2           2
1 - 6           2
9 - 10          2

SQL>

इसलिए, डुप्लीकेट के मामले में, ROW_NUMBER क्वेरी गलत परिणाम देगी। आपको DENSE_RANK . का उपयोग करना चाहिए ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:मुझे किसी तालिका की प्रत्येक k पंक्तियों से n पंक्तियों का चयन करने की आवश्यकता है

  2. Oracle SQL क्वेरी में दोहराई गई पंक्तियों को कैसे निकालें

  3. Oracle सेलेक्ट * पंक्तियों को लौटाता है लेकिन गिनती का चयन करें (1) रिटर्न 0

  4. एक SQL क्वेरी कैसे लिखें जो इनपुट तालिका से कई पंक्तियों को आउटपुट तालिका में एक पंक्ति में जोड़ती है

  5. डेटाबेस में सकर्मक निर्भरता को हल करने के लिए SQL क्वेरी