select
p.ID,
e.NAME
from
Paychecks p
inner join Employee e on p.EmployeeID = e.ID
group by
p.ID
order by
max(p.AmountPaid) desc
लिखने का एक अलग तरीका, जो अधिक तार्किक लगता है, लेकिन धीमा हो सकता है (आपको परीक्षण करना होगा) है:
select
e.ID,
e.NAME
from
Employee e
inner join Paychecks p on p.EmployeeID = e.ID
group by
e.ID
order by
max(p.AmountPaid) desc
लाखों पंक्तियों के साथ, प्रत्येक क्वेरी कभी-कभी धीमी गति से बढ़ रही है, लेकिन उचित अनुक्रमणिका के साथ, यह जितनी तेज़ हो जाती है। मुझे लगता है कि आपको मूल रूप से Paychecks.EmployeeID और Paychecks.AmountPaid पर एक इंडेक्स की आवश्यकता है। और Employee.ID पर अनुक्रमणिका मदद कर सकती है।
यदि जॉइन अंत में आपको मार रहा है, तो आप दो प्रश्नों को निष्पादित कर सकते हैं। पहला वाला केवल तनख्वाह का उपयोग उन्हें कर्मचारी आईडी द्वारा समूहित करने के लिए करता है और उन्हें अधिकतम (पेचेकअमाउंट) द्वारा आदेश देता है, और दूसरे का उपयोग प्रत्येक आईडी के लिए नाम लाने के लिए किया जा सकता है। कभी-कभी आप जितना चाहते हैं उससे अधिक लागत में शामिल होते हैं, और जब आपको 500 कर्मचारियों के लिए 10 मिलियन तनख्वाह मिलती है, तो इसे दो चरणों में करना तेज़ हो सकता है, हालांकि इसका मतलब यह होगा कि वे कंपनी में लगभग 1600 वर्षों से काम कर रहे हैं। .;-)