में ऑर्डर के बाद शीर्ष पंक्ति प्राप्त करें मेरे पास एक टेबल छात्र (आईडी, नाम, विभाग, आयु, स्कोर) है। मैं सबसे कम उम्र के छात्र को ढूंढना चाहता हूं, जो प्रत्येक विभाग के उच्चतम (सबसे कम उम्र के छात्रों में) स्कोर प्राप्त करें। SQL सर्वर में, मैं निम्न SQL का उपयोग कर सकता हूं।ओरेकल सबक्वायरी
select * from student s1
where s1.id in
(select s2.id from student s2
where s2.department = s1.department order by age asc, score desc top 1).
हालांकि, Oracle में, आप खंड द्वारा सबक्वेरी में उपयोग नहीं कर सकते हैं और वहाँ कीवर्ड की तरह कोई सीमा नहीं/शीर्ष है। परिणाम के लिए मुझे दो बार छात्र तालिका में शामिल होना है। ओरेकल में, मैं निम्नलिखित एसक्यूएल का उपयोग करता हूं।
select s1.* from student s1,
(select s2.department, s2.age, max(s2.score) as max_score from student s2,
(select s3.department, min(s3.age) as min_age from student s3 group by s3.department) tmp1 where
s2.department = tmp1.department and s2.age = tmp1.min_age group by s2.department, s2.age) tmp2
where s1.department =tmp2.department and s1.age = tmp2.age and s1.score=tmp2.max_score
क्या किसी को ओरेकल के लिए उपरोक्त एसक्यूएल को सरल बनाने का कोई विचार है।
ओरेकल में, आप * * एक सबक्वेरी में खंड द्वारा आदेश का उपयोग कर सकते हैं। –
विश्लेषणात्मक कार्यों के बिना एक समाधान बहुत आसान है, मेरे प्रश्न के स्वीकृत उत्तर को देखें: http://stackoverflow.com/questions/38180445/oracle-left-join-very-big-table-and-limit-the-joined बड़े-बड़े – Dany