आपकी समस्या इस तथ्य के कारण है कि 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