আমার সহজ প্রশ্ন:
আমি একটি আছে postgresql
ডাটাবেসের: Scores(score integer)
।
আমি কীভাবে দ্রুততম 10 টি স্কোর পাব?
হালনাগাদ:
আমি এই ক্যোয়ারীটি একাধিকবার করব এবং দ্রুত সমাধানের লক্ষ্যে নিচ্ছি।
আমার সহজ প্রশ্ন:
আমি একটি আছে postgresql
ডাটাবেসের: Scores(score integer)
।
আমি কীভাবে দ্রুততম 10 টি স্কোর পাব?
হালনাগাদ:
আমি এই ক্যোয়ারীটি একাধিকবার করব এবং দ্রুত সমাধানের লক্ষ্যে নিচ্ছি।
উত্তর:
এই জন্য আপনি সীমা ব্যবহার করতে পারেন
select *
from scores
order by score desc
limit 10
যদি পারফরম্যান্স গুরুত্বপূর্ণ হয় (কখন তা হয় না ;-) স্কোরের সূচকের সন্ধান করুন।
8.4 সংস্করণ দিয়ে শুরু করে, আপনি স্ট্যান্ডার্ড ( এসকিউএল: ২০০৮ ) ব্যবহার করতে পারেনfetch first
select *
from scores
order by score desc
fetch first 10 rows only
@ রাফভান্স যেমন উল্লেখ করেছেন, এটি আপনাকে 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
দিয়ে শেষ হওয়া অর্ডার LIMIT টি দফা:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
অবশ্যই SELECT *
কর্মক্ষমতা গুরুতরভাবে প্রভাবিত করতে পারে, তাই সতর্কতার সাথে এটি ব্যবহার করুন।
মনে রাখবেন যে শীর্ষ 10 মানগুলিতে যদি সম্পর্ক থাকে তবে আপনি কেবলমাত্র শীর্ষ 10 সারি পাবেন, উত্তরগুলি দিয়ে দেওয়া শীর্ষ 10 মানগুলি পাবেন না । উদাহরণস্বরূপ: যদি শীর্ষ 5 মান 10, 11, 12, 13, 14, 15 হয় তবে আপনার ডেটা 10, 10, 11, 12, 13, 14, 15 ধারণ করে আপনি কেবল 10, 10, 11, 12, 13 পাবেন, আপনার শীর্ষ 5 হিসাবে এLIMIT
এখানে একটি সমাধান রয়েছে যা বন্ধনগুলি থাকলে 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
?