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

Rownum कथन इसके बिना की तुलना में भिन्न पंक्ति देता है

आपकी समस्या इस तथ्य के कारण है कि where खंड order by . से पहले लागू किया जाता है ।

आप पहले सॉर्ट करके और फिर rownum . लागू करके समस्या को हल कर सकते हैं :

select * from (
    select deptno from emp 
     where job='CLERK' 
     group by deptno 
    having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno) 
     order by deptno) 
where rownum=1;

नोट:

यह समस्या Oracle विशिष्ट है। एमएस एसक्यूएल सर्वर TOP और MySQL LIMIT दोनों order by . के बाद लागू होते हैं खंड।

नोट 2:

Oracle डेटाबेस 12c में ( 12.1), k+m से k+m तक पंक्तियों के चयन के लिए एक नई सुविधा है , offset k rows fetch next m rows only . मैं उपरोक्त समाधान के बजाय इसका उपयोग करने की अनुशंसा करता हूं। इसे इंगित करने के लिए ललित कुमार बी को धन्यवाद।

select deptno from emp 
 where job='CLERK' 
 group by deptno 
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno) 
order by deptno
fetch next 1 rows only

लेकिन क्या होगा यदि एक ही संख्या वाले दो (या अधिक) विभाग हों? चिंता न करें, एक प्रकार है जो सभी संबंधों को लौटाता है:

select deptno from emp 
 where job='CLERK' 
 group by deptno 
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno) 
order by deptno
fetch next 1 rows with ties


  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 का उपयोग करके तालिका में XML खाली टैग के लिए डमी मान कैसे प्राप्त करें?

  2. पहले कुछ या सबसे अधिक अवलोकन खोजने पर TOP या रैंक का उपयोग करें

  3. ORA-00907:विदेशी कुंजी Oracle 12c बनाने पर राइट कोष्ठक गुम होना

  4. Oracle में अल्पविराम से अलग की गई स्ट्रिंग को कैसे विभाजित करें?

  5. Oracle डेटाबेस में PL/SQL पैकेज कैसे बनाएँ?