간단한 질문이 있습니다.
나는이 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
답변
LIMIT 절 을 사용 ORDER BY
하여 DESC
끝 순서로 찾고있는 것 같습니다 .
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로 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
답변
(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date DESC
LIMIT 10)
UNION ALL
(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date ASC
LIMIT 10)
답변
