select
x.last_name,
x.name_count
from
(select
u.last_name,
count(*) as name_count,
rank() over (order by count(*) desc) as rank
from
users u
group by
u.last_name) x
where
x.rank = 1
विश्लेषणात्मक कार्य का उपयोग करें rank
. यह count(*) desc
. के क्रम के आधार पर एक नंबरिंग असाइन करेगा . यदि दो नामों की गिनती समान है, तो उन्हें समान रैंक मिलती है, और अगली संख्या को छोड़ दिया जाता है (इसलिए आपको रैंक 1, 1 और 3 वाली पंक्तियाँ मिल सकती हैं)। dense_rank
एक विकल्प है जो दो पंक्तियों को समान रैंक मिलने पर अगली संख्या को नहीं छोड़ता है, (इसलिए आपको 1, 1, 2 मिलेगा), लेकिन यदि आप केवल रैंक 1 वाली पंक्तियाँ चाहते हैं, तो बहुत अधिक अंतर नहीं है .
यदि आप केवल एक पंक्ति चाहते हैं, तो आप चाहते हैं कि प्रत्येक पंक्ति में एक अलग संख्या हो। उस स्थिति में, row_number
. का उपयोग करें . इस छोटे-लेकिन-महत्वपूर्ण अंतर के अलावा, ये फ़ंक्शन समान हैं और इन्हें उसी तरह उपयोग किया जा सकता है।