मेरा सरल प्रश्न है:
मेरे पास एक postgresql
डेटाबेस है Scores(score integer)
:।
मैं सबसे तेज 10 अंक कैसे प्राप्त करूंगा?
अपडेट करें:
मैं इस क्वेरी को कई बार करूंगा और सबसे तेज समाधान के लिए लक्ष्य बना रहा हूं।
मेरा सरल प्रश्न है:
मेरे पास एक postgresql
डेटाबेस है Scores(score integer)
:।
मैं सबसे तेज 10 अंक कैसे प्राप्त करूंगा?
अपडेट करें:
मैं इस क्वेरी को कई बार करूंगा और सबसे तेज समाधान के लिए लक्ष्य बना रहा हूं।
जवाबों:
इसके लिए आप लिमिट का इस्तेमाल कर सकते हैं
select *
from scores
order by score desc
limit 10
यदि प्रदर्शन महत्वपूर्ण है (यह नहीं है;; स्कोर पर एक सूचकांक के लिए देखो।
संस्करण 8.4 से शुरू होकर, आप मानक का उपयोग भी कर सकते हैं ( SQL: 2008 )fetch first
select *
from scores
order by score desc
fetch first 10 rows only
जैसा कि @Raphvanns ने बताया, यह आपको first 10 rows
शाब्दिक रूप से देगा। डुप्लिकेट मानों को निकालने के लिए, आपको distinct
पंक्तियों का चयन करना होगा , जैसे
select distinct *
from scores
order by score desc
fetch first 10 rows only
fetch first X rows only
जवाब मैं देख रहा था - दूर भविष्य से धन्यवाद!
लगता है आप सीमा खंड के साथ समाप्त होने के क्रम ORDER BY
में देख रहे हैं :DESC
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
बेशक SELECT *
प्रदर्शन को गंभीरता से प्रभावित कर सकता है, इसलिए सावधानी के साथ इसका उपयोग करें।
ध्यान दें कि यदि शीर्ष 10 मूल्यों में संबंध हैं, तो आप केवल शीर्ष 10 पंक्तियों को प्राप्त करेंगे, न कि दिए गए उत्तरों के साथ शीर्ष 10 मान । Ex: यदि शीर्ष 5 मान 10, 11, 12, 13, 14, 15 हैं, लेकिन आपके डेटा में 10, 10, 11, 12, 13, 14, 15 हैं, तो आपको केवल 10, 10, 11, 12, 13 प्राप्त होंगे। एक के साथ अपने शीर्ष 5 के रूप में 14LIMIT
यहां एक समाधान है जो 10 से अधिक पंक्तियों को लौटा देगा यदि संबंध हैं लेकिन आपको उन सभी पंक्तियों को मिलेगा जहां some_value_column
तकनीकी रूप से शीर्ष 10 में हैं।
select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
explain analyze
?